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

7 投票
3 回答
46498 浏览
提问于 2025-04-15 14:17

我正在用Python写一个网页抓取的脚本,使用的模块是'mechanize'。我想用mechanize.click_link()这个方法去点击一个链接,这个链接的href里有javascript:__doPostBack。我觉得我正在解析的这个页面是用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

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。比如说,有人可能在使用一个叫做“库”的东西时,发现它的某个功能没有按预期工作。这种情况下,通常我们会去查找相关的资料或者在网上问问其他人,看看有没有人遇到过类似的问题。

在这个过程中,大家可能会分享他们的经验,告诉你应该怎么做,或者指出可能的错误。这种交流非常重要,因为它可以帮助我们更快地找到解决方案,避免重复犯错。

总之,编程就像是一个不断学习和解决问题的过程,遇到困难时不要害怕寻求帮助,大家都是从新手一步步成长起来的。

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

我觉得 mechanize 这个工具不支持 Javascript。如果你想抓取那些必须依赖 Javascript 才能正常工作的网页,你可能需要换个工具,比如 Selenium RC

10

我不使用 mechanize,但我自己用 Python 做了很多网页抓取的工作。

当我遇到像 __doPostBack 这样的 JavaScript 函数时,我会这样做:

我会在 Firefox 浏览器中打开这个网站,然后使用 HttpFox 插件,查看浏览器在点击相关链接时发送给服务器的 POST 请求参数。

接着,我会在 Python 中用 urllib.parse.urlencode 来构建我需要的查询字符串和 POST 数据,模拟这个请求。

有时候,网站还会使用 cookies,所以我会用 Python 的 http.cookiejar 来处理这些。

我已经成功用这种方法做了好几次。

撰写回答