使用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(); });