29

是否有一个很好的测试套件或工具集可以自动化网站导航(支持 Javascript)并从页面收集 HTML?

当然,我可以用 BeautifulSoup 直接抓取 HTML。但这对需要 Javascript 的网站没有好处。:)

4

9 回答 9

26

您可以使用SeleniumWatir来驱动真正的浏览器。

还有一些基于 JavaScript 的无头浏览器:

  • PhantomJS是一个无头 Webkit 浏览器。
    • pjscrape是一个基于 PhantomJS 和 jQuery 的抓取框架。
    • CasperJS是基于 PhantomJS 的导航脚本和测试实用程序,如果您需要做的不仅仅是指向要抓取的 URL。
  • Node.js僵尸

就我个人而言,我最熟悉 Selenium,它支持以多种语言编写自动化脚本,并且拥有更成熟的工具,例如优秀的 Firefox 的Selenium IDE扩展,可用于编写和运行测试用例,以及可以将测试脚本导出为多种语言。

于 2008-09-24T03:27:21.320 回答
6

使用HtmlUnit也是一种可能。

HtmlUnit 是“Java 程序的无 GUI 浏览器”。它对 HTML 文档进行建模并提供一个 API,允许您调用页面、填写表单、单击链接等……就像您在“普通”浏览器中所做的一样。

它具有相当好的 JavaScript 支持(不断改进),甚至能够使用非常复杂的 AJAX 库,根据您要使用的配置模拟 Firefox 或 Internet Explorer。

它通常用于测试目的或从网站检索信息。

于 2009-07-10T02:52:39.297 回答
4

Selenium 现在包装了 htmlunit,因此您不再需要启动浏览器。新的 WebDriver api 也很容易使用。第一个例子使用 htmlunit 驱动

于 2010-12-30T08:38:51.337 回答
2

编写一个适用于任何任意站点的解决方案将非常困难。每个导航菜单实现都可以是非常独特的。我在爬虫方面做了很多工作,如果你知道你想要定位的网站,这就是我的处理方法。

通常,如果您分析导航菜单中使用的特定 javascript,使用正则表达式来提取用于构建导航菜单的整个变量集是相当容易的。我从未使用过 Beautiful Soup,但从您的描述看来,它可能只适用于 HTML 元素,而不能在脚本标签内工作。

如果您仍然遇到问题,或者需要模拟一些表单 POST 或 ajax,请获取 Firefox 并安装LiveHttpHeaders插件。该插件将允许您手动浏览网站并捕获正在导航的 URL 以及在您手动浏览期间传递的任何 cookie。这就是您需要您的爬虫机器人发送请求以从目标网络服务器获得有效响应的内容。这也将捕获正在进行的任何 ajax 调用,并且在许多情况下,必须在您的爬虫中实现相同的 ajax 调用才能获得所需的响应。

于 2008-09-24T03:19:24.380 回答
2

Mozenda也是一个很好的工具。

于 2009-10-27T23:33:06.433 回答
2

你可以试试Scrape.it的开源屏幕刮板

更新:截至 2013 年 4 月 4 日,Scrape.it Screen Scraper 在github上是开源的。

于 2011-12-17T03:06:53.283 回答
1

请记住,javascript 的奇思妙想会扰乱浏览器的页面内部 DOM 模型,并且对原始 HTML 没有任何作用。

于 2008-09-24T03:03:51.330 回答
1

我一直在为此使用 Selenium,它发现它效果很好。Selenium 在浏览器中运行,可与 Firefox、Webkit 和 IE 一起使用。 http://selenium.openqa.org/

于 2008-09-24T03:27:50.383 回答
1

@insin Watir 不仅仅是 IE。

https://stackoverflow.com/questions/81566#83387

于 2008-10-05T14:02:23.463 回答