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

时间:2016-12-28 03:08:31

标签: javascript node.js

我想做一些事件,例如。点击网站。我可以使用javascript(或Chrome扩展程序)在chrome中执行此操作,但是可以不打开chrome但使用服务器端代码吗?没有提供API。它不是在刮擦,而是采取某种行动。

1 个答案:

答案 0 :(得分:1)

NodeJS使用Google V8 engine来解释JavaScript代码。它不在浏览器环境中运行,因此缺少DOM和事件处理。但是,您实际上可以使用mock-browser包在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是NodeJS的headless browser,用于测试,抓取等。它为您提供了一个可以模拟浏览器的全功能浏览器。

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