如何在href中单击具有javascript:__ doPostBack的链接?

时间:2009-09-13 15:30:53

标签: javascript python mechanize

我正在使用模块'mechanize'在python中编写一个屏幕抓取器脚本,我想在href中使用javascript:__ doPostBack的链接上使用mechanize.click_link()方法。 我相信我试图解析的页面是使用AJAX。

注意:mech是mechanize.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

我想在点击链接后检索页面源。

3 个答案:

答案 0 :(得分:9)

我不使用机械化,但是我用python做了大量的网页抓取。

当我遇到像__doPostBack这样的javascript函数时,我会执行以下操作:
我在Firefox中访问该网站,并使用HttpFox扩展名查看浏览器在单击相关链接时发送到Web服务器的POST请求的参数。
然后我使用urllib.parse.urlencode在python中构建相同的请求来构建我需要的查询字符串和POST数据。
有时网站也使用cookies,所以我只使用python的http.cookiejar。

我成功地使用过这种技术几次。

答案 1 :(得分:1)

我认为mechanize不支持Javascript;要抓取本质上依赖于Javascript执行功能的页面,您可能需要使用其他工具,例如Selenium RC

答案 2 :(得分:0)

>>> 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