2016-12-28 74 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。 –