使用JavaScript支持进行屏幕抓取的好工具是什么?

时间:2020-03-06 14:38:24  来源:igfitidea点击:

是否有一个好的测试套件或者工具集,可以在支持Javascript的情况下自动进行网站导航并从页面收集HTML?

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

解决方案

请记住,JavaScript的幻想使浏览器的页面内部DOM模型变得混乱,并且对原始HTML无效。

编写一个可以与任何任意站点一起工作的解决方案将是非常困难的。每个导航菜单的实现都可能非常独特。我在刮板方面做了大量工作,并且,如果我们知道要定位的站点,这就是我的处理方法。

通常,如果我们分析导航菜单中使用的特定javascript,则使用正则表达式提取用于构建导航菜单的整个变量集非常容易。我从未使用过Beautiful Soup,但是从描述看来,它似乎只能在HTML元素上运行,而不能在script标签内运行。

如果仍然有问题,或者需要模拟某种形式的POST或者Ajax,请使用Firefox并安装LiveHttpHeaders插件。该插件将允许我们手动浏览站点并捕获正在导航的URL以及在手动浏览过程中传递的任何cookie。那就是我们需要scraperbot发送请求以从目标Web服务器获得有效响应的内容。这也将捕获所有正在进行的ajax调用,并且在许多情况下,必须在scraper中实施相同的ajax调用才能获得所需的响应。

我们可以使用Selenium或者Watir来驱动真正的浏览器。

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

  • CasperJS是PhantomJS上的导航脚本和测试实用工具,如果我们需要做的只是指向要抓取的URL,还需要做更多的事情。
  • Zombie for Node.js

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

我一直在使用Selenium,它发现它很棒。
Selenium在浏览器中运行,并且可以与Firefox,Webkit和IE一起使用。
http://selenium.openqa.org/

@insin Watir不仅是IE。

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

也可以使用HtmlUnit。

HtmlUnit is a "GUI-Less browser for
  Java programs". It models HTML
  documents and provides an API that
  allows you to invoke pages, fill out
  forms, click links, etc... just like
  you do in your "normal" browser.
  
  It has fairly good JavaScript support
  (which is constantly improving) and is
  able to work even with quite complex
  AJAX libraries, simulating either
  Firefox or Internet Explorer depending
  on the configuration you want to use.
  
  It is typically used for testing
  purposes or to retrieve information
  from web sites.

Mozenda也是一个很好的使用工具。

Selenium现在包装了htmlunit,因此我们不再需要启动浏览器。新的WebDriver API也非常易于使用。第一个示例使用htmlunit驱动程序