Node.js使用Webdriver.io + Selenium进行无头网络刮擦

时间:2016-09-16 16:21:02

标签: node.js selenium

我需要在Node.js中使用无头Selenium进行抓取。我试过Webdriver.io,它与非无头Selenium一起工作。但是当我运行无头Selenium时,它根本不起作用。这是代码(与webdriver.io示例相同)

webdriverio
  .remote(options)
  .init()
  .url('http://www.google.com')
  .getTitle().then(function(title) {
  console.log('Title was: ' + title);
})
  .end();

如何让它与无头Selenium一起使用?或者有其他选择吗?

2 个答案:

答案 0 :(得分:0)

你必须在无头环境中设置硒。尝试xvfb - 这是firefox的无头gui。

$ apt-get install fvfb -y
$ DISPLAY=:1 xvfb-run java -Dwebdriver.gecko.driver=./geckodriver -jar selenium-server-standalone-3.0.1.jar

答案 1 :(得分:-1)

我过去曾使用不同的库进行过大量的搜索,除非您需要登录或操作页面,否则我建议您使用requestcheerio来处理刮。这允许您使用jQuery样式过滤来抓取您的内容。它还允许您执行抓取,而不依赖于Selenium或PhantomJS等其他任何内容。

快速举例:

request('http://www.google.com', (err, response, body) => {
    if(err) console.error(err);
    const $ = cheerio.load(body);

    const title = $('title').text();
    console.log(`Title was: ${title}`);
    // Or scrape whatever you want from the page
});

如果您需要处理登录,处理表单或在页面上执行任何操作,您可以尝试任意数量的库。我已经使用Zombie.js得到了不错的结果,并尝试了其他几个如Selenium Nightmare(使用PhantomJS),PhantomJS等。

最后,Request和Cheerio已经很容易快速抓取一页。