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。 –