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.

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top