是否有一个很好的测试套件或工具集可以自动化网站导航(支持 Javascript)并从页面收集 HTML?
当然,我可以用 BeautifulSoup 直接抓取 HTML。但这对需要 Javascript 的网站没有好处。:)
是否有一个很好的测试套件或工具集可以自动化网站导航(支持 Javascript)并从页面收集 HTML?
当然,我可以用 BeautifulSoup 直接抓取 HTML。但这对需要 Javascript 的网站没有好处。:)
还有一些基于 JavaScript 的无头浏览器:
就我个人而言,我最熟悉 Selenium,它支持以多种语言编写自动化脚本,并且拥有更成熟的工具,例如优秀的 Firefox 的Selenium IDE扩展,可用于编写和运行测试用例,以及可以将测试脚本导出为多种语言。
使用HtmlUnit也是一种可能。
HtmlUnit 是“Java 程序的无 GUI 浏览器”。它对 HTML 文档进行建模并提供一个 API,允许您调用页面、填写表单、单击链接等……就像您在“普通”浏览器中所做的一样。
它具有相当好的 JavaScript 支持(不断改进),甚至能够使用非常复杂的 AJAX 库,根据您要使用的配置模拟 Firefox 或 Internet Explorer。
它通常用于测试目的或从网站检索信息。
Selenium 现在包装了 htmlunit,因此您不再需要启动浏览器。新的 WebDriver api 也很容易使用。第一个例子使用 htmlunit 驱动
编写一个适用于任何任意站点的解决方案将非常困难。每个导航菜单实现都可以是非常独特的。我在爬虫方面做了很多工作,如果你知道你想要定位的网站,这就是我的处理方法。
通常,如果您分析导航菜单中使用的特定 javascript,使用正则表达式来提取用于构建导航菜单的整个变量集是相当容易的。我从未使用过 Beautiful Soup,但从您的描述看来,它可能只适用于 HTML 元素,而不能在脚本标签内工作。
如果您仍然遇到问题,或者需要模拟一些表单 POST 或 ajax,请获取 Firefox 并安装LiveHttpHeaders插件。该插件将允许您手动浏览网站并捕获正在导航的 URL 以及在您手动浏览期间传递的任何 cookie。这就是您需要您的爬虫机器人发送请求以从目标网络服务器获得有效响应的内容。这也将捕获正在进行的任何 ajax 调用,并且在许多情况下,必须在您的爬虫中实现相同的 ajax 调用才能获得所需的响应。
Mozenda也是一个很好的工具。
请记住,javascript 的奇思妙想会扰乱浏览器的页面内部 DOM 模型,并且对原始 HTML 没有任何作用。
我一直在为此使用 Selenium,它发现它效果很好。Selenium 在浏览器中运行,可与 Firefox、Webkit 和 IE 一起使用。 http://selenium.openqa.org/
@insin Watir 不仅仅是 IE。