2016-12-28 40 views
1

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

回答

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刮

如果你想刮的网站,你可以使用库调用本身使用PhantomJS CasperJS。举个例子:

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(); 
}); 
+0

'也许你应该重新考虑你为什么要使用DOM和事件在服务器上side.' 因为这是触发事件的唯一途径? –

+0

@Nately Jamerson:触发什么事件?为什么你需要在服务器端的DOM? – bman

+0

我有一堆链接,我想触发点击某些按钮上的网站,你可以做到这一点,而不触发DOM?没有提供API。 –