使用API​​使用node.js执行浏览器操作

我想做一些事件,例如。 点击一个网站。 我可以使用javascript(或扩展名为chrome)在Chrome中执行此操作,但是可以在不打开Chrome而是使用服务器端代码的情况下执行此操作? 没有API提供。 这不是在刮,而是在做某种行动。

NodeJS使用Google V8引擎来解释JavaScript代码。 它不能在浏览器环境中运行,因此缺lessDOM和事件处理。 但是,您实际上可以使用模拟浏览器软件包在NodeJS环境中模拟浏览器 。

const MockBrowser = require('mock-browser/lib/MockBrowser') const mockBrowser = new MockBrowser() global.window = mockBrowser.getWindow() global.document = mockBrowser.getDocument() global.navigator = mockBrowser.getNavigator() 

但是,你应该小心这种方法,因为一些方法(例如getComputedStyle )仍然不起作用。

也许你应该重新考虑为什么要在服务器端使用DOM和事件。

PhantomJS:NodeJS的无头浏览器

PhantomJS是用于testing,抓取等的NodeJS的无头浏览器 。它提供了一个function齐全的浏览器,可以模拟浏览器。

使用CasperJS进行抓取

如果你想抓取网站,你可以使用一个名为CasperJS的库本身使用PhantomJS。 一个例子:

 var casper = require('casper').create(); var links; function getLinks() { // Scrape the links from top-right nav of the website var links = document.querySelectorAll('ul.navigation li a'); return Array.prototype.map.call(links, function (e) { return e.getAttribute('href') }); } // Opens casperjs homepage casper.start('http://casperjs.org/'); casper.then(function () { links = this.evaluate(getLinks); }); casper.run(function () { for(var i in links) { console.log(links[i]); } casper.done(); });