如何点击一个href链接中包含javascript:__doPostBack的链接?

7

我正在使用 Python 中的模块“mechanize”编写一个屏幕抓取脚本,并希望在具有 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个回答

10

我不使用 mechanize,但我自己用 Python 做了很多网络爬取。

遇到像 __doPostBack 这样的 javascript 函数时,我的做法如下:

我在 Firefox 中访问网站,并使用 HttpFox 扩展程序查看浏览器点击相关链接时发送到 Web 服务器的 POST 请求的参数。

然后,我使用 urllib.parse.urlencode 在 python 中构建同样的请求,以构建需要的查询字符串和 POST 数据。

有时网站也会使用 cookies,所以我只需使用 python 的 http.cookiejar。

我已经成功地使用这种技术多次了。


当我收到响应时,我该怎么做?如何解码它? - mrGreenBrown

1

我认为mechanize不支持Javascript;如果要爬取那些内在依赖于Javascript执行功能的页面,你可能需要使用其他工具,比如Selenium RC


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接