2

这里的LINK建议可以“弄清楚 JavaScript 在做什么并在你的 Python 代码中模拟它:”这就是我想要帮助做的事情,即我的问题。如何模拟 javascript:__doPostBack ?

来自网站的代码(此处为完整页面源链接

<a style="color: Black;" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$gvSearchResults','Page$2')">2</a>

当然,我基本上知道从这里去哪里。

提前感谢您的帮助和想法

好的,有很多帖子询问如何在使用 python 库 mechanize、beautifulsoup 进行网络抓取时如何单击 javascript 按钮,类似的。我看到很多“不支持”的响应都使用这个非 python 解决方案。我认为这个问题的 python 解决方案将对许多人大有裨益。鉴于此,我不是在寻找诸如使用 x、y 或 z 之类的答案,它们不是 python 代码或需要与浏览器交互。

4

1 回答 1

3

mechanize 页面并不建议您可以在 Python 中模拟 JavaScript。意思是您可以更改表单中的隐藏字段,从而欺骗网络服务器,使人1选择了该字段。您仍然需要自己分析目标。

除非您希望在 Python 中创建 JavaScript 解释器,否则不会有基于 Python 的解决方案来解决这个问题。

对这个问题的想法使我想到了三种可能的解决方案:

  1. 创建一个XULRunner应用程序
  2. 浏览器自动化
  3. 尝试解释客户端代码

在这三个中,我只真正看到过关于 2 的讨论。我在商业抓取应用程序中看到了接近 1 的内容,在该应用程序中,您基本上通过浏览网站并在页面上选择您希望脚本使用的内容来创建脚本将来提取。

通过接受wsgi Request 对象的序列化(JSON?),让应用程序获取 URL,然后将处理后的页面作为 wsgi Response 对象发送,1 可能会与 Python 脚本一起使用。您可以在 urllib2 周围包装一些中间件来实现这一点。可能是矫枉过正,但想想很有趣。

2 通常通过以测试为中心的工具Selenium RC (远程控制)来实现。它提供了一些方法,getHtmlSource但我听说使用它的大多数人都不喜欢它的 API。

3 我不知道。node.js现在很火,但是我没碰过。我从来没有能够在我的 Ubuntu 机器上构建spidermonkey,所以我也没有碰过它。我的预感是,为了做到这一点,您需要将 HTML 源代码和您的详细信息提供给 JS 解释器,如果 JavaScript 想要重新连接服务器,则需要伪装成您的 User-Agent 等。

1好吧,从技术上讲,是一个兼容 JavaScript 的用户代理,它几乎总是人类使用的网络浏览器

于 2010-10-10T09:17:04.833 回答