Comment cliquer sur un lien qui a du javascript: __ doPostBack in href?
-
07-07-2019 - |
Question
Je suis en train d'écrire un script d'écran en python avec le module 'mechanize' et j'aimerais utiliser la méthode mechanize.click_link () sur un lien javascript: __ doPostBack in href. Je crois que la page que j'essaie d'analyser utilise AJAX.
Remarque: mech est le mécanize.Browser ()
>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False
J'aimerais récupérer le code source de la page après avoir cliqué sur le lien.
La solution
Je n'utilise pas mécaniser, mais je fais beaucoup de Web en me grattant avec du python.
Lorsque je rencontre une fonction javascript telle que __doPostBack, je procède comme suit:
J'accède au site Web dans Firefox et j'utilise l'extension HttpFox pour voir les paramètres du POST demande au navigateur envoyé au serveur Web en cliquant sur le lien correspondant.
Je construis ensuite la même requête en python en utilisant urllib.parse.urlencode pour créer les chaînes de requête et les données POST dont j'ai besoin.
Parfois, le site Web utilise également des cookies. J'utilise donc simplement http.cookiejar de python.
J'ai utilisé cette technique avec succès plusieurs fois.
Autres conseils
Je ne pense pas que mécanize
prenne en charge JavaScript; Pour supprimer des pages qui reposent intrinsèquement sur l'exécution de Javascript, vous devrez peut-être utiliser un autre outil, tel que Selenium RC .
>>> next_link.__class__.__name__
'Link'
>>> next_link
Link(base_url='http://www.citius.mj.pt/Portal/consultas/ConsultasDistribuicao.aspx', url="javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')", text='2', tag='a', attrs=[('id', 'ctl00_ContentPlaceHolder1_Pager1_lnkNext'), ('title', 'P\xc3\xa1gina seguinte: 2'), ('href', "javascript:__doPostBack('ctl00$ContentPlaceHolder1$Pager1$lnkNext','')")])
>>> req = mech.click_link(next_link)
>>> req
<urllib2.Request instance at 0x025BEE40>
>>> req.has_data()
False