刮一个网页,并通过点击button导航

我想在服务器端执行以下操作:

1)刮网页
2)模拟该页面上的点击,然后导航到新页面。
3)刮新页面
4)模拟新页面上的一些button点击
5)通过json或其他方式将数据发送回客户端

我正在考虑与Node.js一起使用它。

但我很困惑,我应该使用哪个模块
a)僵尸
b)Node.io
c)Phantomjs
d)JSDOM
e)还有其他的东西

我已经安装了节点io,但无法通过命令提示符运行它。

PS:我在Windows 2008服务器上工作

       

网上收集的解决方案 "刮一个网页,并通过点击button导航"

Zombie.js和Node.io在JSDOM上运行,因此你的select要么与JSDOM(或任何等效包装),无头浏览器(PhantomJS,SlimerJS)或Cheerio。

  • JSDOM相当慢,因为它必须在Node.js中重新创buildDOM和CSSOM。
  • PhantomJS / SlimerJS是正确的无头浏览器,因此性能是好的,那些也是非常可靠的。
  • Cheerio是JSDOM的轻量级替代品。 它不会在Node.js中重新创build整个页面(它只是下载和parsingDOM – 不执行JavaScript)。 因此,你不能真正点击button/链接,但它是非常快的刮网页。

根据你的要求,我可能会像一个无头的浏览器。 特别是,我会selectCasperJS,因为它有一个很好的和富有performance力的API,它是快速和可靠的(它不需要重新分析和渲染像JSDOM那样的dom或css的轮子),而且很容易与button和链接等元素进行交互。

您在CasperJS中的工作stream程应该看起来像这样:

casper.start(); casper .then(function(){ console.log("Start:"); }) .thenOpen("https://www.domain.com/page1") .then(function(){ // scrape something this.echo(this.getHTML('h1#foobar')); }) .thenClick("#button1") .then(function(){ // scrape something else this.echo(this.getHTML('h2#foobar')); }) .thenClick("#button2") thenOpen("http://myserver.com", { method: "post", data: { my: 'data', } }, function() { this.echo("data sent back to the server") }); casper.run(); 

您列出的模块执行以下操作:

  • Phantomjs /僵尸 – 模拟浏览器(无头 – 实际上没有显示)。 可以用于刮动静态或dynamic。 或者testing你的html页面。
  • Node.io/jsdom – webscraping:从页面提取数据(静态)。

看着你的要求,你可以使用幻影或僵尸。