1
我想做一些事件,例如。点击一个网站。我可以用javascript(或扩展名为chrome)在Chrome中执行此操作,但是可以在不打开Chrome的情况下使用服务器端代码吗?没有提供API。这不是在刮,而是在做某种行动。使用API通过node.js执行浏览器动作
我想做一些事件,例如。点击一个网站。我可以用javascript(或扩展名为chrome)在Chrome中执行此操作,但是可以在不打开Chrome的情况下使用服务器端代码吗?没有提供API。这不是在刮,而是在做某种行动。使用API通过node.js执行浏览器动作
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,刮痧等,为您提供一个全功能的浏览器,它可以模拟浏览器headless browser。
如果你想刮的网站,你可以使用库调用本身使用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();
});
'也许你应该重新考虑你为什么要使用DOM和事件在服务器上side.' 因为这是触发事件的唯一途径? –
@Nately Jamerson:触发什么事件?为什么你需要在服务器端的DOM? – bman
我有一堆链接,我想触发点击某些按钮上的网站,你可以做到这一点,而不触发DOM?没有提供API。 –