如何使用 Mechanize 处理 JavaScript?

Posted

技术标签:

【中文标题】如何使用 Mechanize 处理 JavaScript?【英文标题】:How do I use Mechanize to process JavaScript? 【发布时间】:2010-10-22 13:55:55 【问题描述】:

我正在连接到一个网站,正在登录。

网站将我重定向到新页面,Mechanize 处理所有 cookie 和重定向作业,但是我无法获得最后一页。我使用了 Firebug 并再次完成了同样的工作,发现我必须通过 Mechanize 再通过两页。

我快速浏览了页面,发现有一些 javascripthtml 代码,但无法理解,因为它看起来不像正常的页面代码。这些页面是做什么用的?他们如何重定向到其他页面?我应该怎么做才能通过这些?

【问题讨论】:

你为什么不把javascript放到pastie.org这样的粘贴网站中,然后把链接贴在这里? 【参考方案1】:

如果您需要使用 Javascript 处理页面,请尝试 WATIR 或 Selenium - 它们驱动真正的网络浏览器,因此可以处理任何 Javascript。 WATIR Classic 需要安装了特定扩展程序的 IE 或 Firefox,您会看到页面在屏幕上闪烁。

您的另一个选择是了解违规页面上的 Javascript 的作用并手动绕过它,但这似乎很麻烦。

【讨论】:

谢谢大家。 watir 做了我想做的事 :) 它看起来很棒,让我更喜欢 ruby​​ :) 第一次我试图访问的网站因为 user_agent 而对我生气,但是当我将它设置为 firefox 时,问题有走了。堆栈溢出摇滚!我喜欢这里:) @millimoose 你可以在 WATIR 中执行脚本时隐藏浏览器吗? 哇,线程死灵术。我不知道了,我敢打赌“不”——无论如何,这与 OP 提出的问题不同,因此您可以在 SO 上单独提问,以便其他人有机会回答。我还会考虑查看 PhantomJS,这是一个无头(即“无 UI”)WebKit 自动机。它工作得很好,但上次我想用它做一些事情时,异步 API 让我需要做的事情过于复杂,所以我最终选择了 Selenium。【参考方案2】:

目前,Mechanize 不处理 JavaScript。有人谈到最终将 Johnson 的功能合并到 Mechanize 中,但在此之前,您有两个选择:

    弄清楚 JavaScript 足以理解如何遍历这些页面。 使用Watir自动化一个确实理解JavaScript的实际浏览器。

【讨论】:

Johnson 是一个死项目。有替代品吗?【参考方案3】:

这些页面是做什么用的?他们如何重定向到其他页面。我应该怎么做才能通过这些?

有时工作是在这些页面上完成的。有时,JavaScript 会阻止自动访问,就像您尝试做的那样:)。许多网站都有不必要的检查以确保您拥有“良好”的浏览器,因此请确保您的 user_agent 设置为常见的,例如 IE。有时将user_agent 设置为看起来像一个旧浏览器可以让您在没有 JavaScript 的情况下通过。

网站自动化很有趣,因为您必须使用多种策略来智取网站及其软件开发人员。正如其他人所说,Watir 是目前超越 JavaScript 的最佳工具。

【讨论】:

以上是关于如何使用 Mechanize 处理 JavaScript?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 mechanize gem 抓取图像的图标链接

如何使用 Python Mechanize 自动添加 Google 警报

如何配置 Ruby Mechanize 代理以通过 Charles Web 代理工作?

使用 mechanize 绕过 404

Mechanize Rails - Web Scraping - 服务器使用JSON进行响应 - 如何将URL解析为下载CSV

通过 Mechanize 抓取并提交表单。如何查看传递的参数?