2013-02-22 82 views
5

我有一個網頁,其中有一些JS API不改變dom,但返回一些數字。 我想編寫一個NodeJS應用程序,下載這些頁面並在下載頁面的上下文中執行這些功能。使用cheerio執行scraped JavaScript

我一直在尋找cheerio進行頁面抓取......但是當我看到使用它瀏覽和操縱DOM有多容易時,我看不到有任何運行頁面功能的權限。可以做到嗎?

我應該看看,而不是在jsdom?

感謝

+0

[this](http://stackoverflow.com/a/7978072/2172543)是迄今爲止關於您的問題找到的最佳答案。這不是嚴格執行網頁JavaScript,是關於HTML解析。 – Marcel 2013-03-24 17:43:47

回答

1

Cheerio和jsdom都是HTML刮削器和沒有執行JavaScript的概念。如果您希望訪問的API是使用JavaScript編寫的,則很難阻止您提取它們並在節點內運行它們。但要小心,下載/執行任意JavaScript會帶來巨大的安全風險。如果您想模擬瀏覽器的行爲,請查看http://phantomjs.org/。這是Node的無頭瀏覽器,可以完成普通瀏覽器的所有功能。

+1

請注意,如果您確實想在Node中安全地運行JS,那麼可以通過具有'runInContext'方法的'vm'模塊完全可行,該方法與代碼的其餘部分完全隔離(但仍可以佔用資源)。 – 2014-05-11 20:32:12

+2

jsdom **不是**只是一個HTML刮板,沒有執行JavaScript的概念。請參閱文檔:[初始化生命週期](https://github.com/tmpvar/jsdom/blob/master/README.md#initialization-lifecycle)和[對於hardcore:jsdom.jsdom](https:// github。 COM/tmpvar/jsdom /斑點/主/ README.md#爲最鐵桿-jsdomjsdom) – rsp 2014-07-30 23:39:43

2

聽起來像你想要使用PhantomJS,它會提供完全呈現的輸出,然後使用cheerio。