2012-02-28 18 views
49

phantomjs具有配置的LoadImage,如何控制PhantomJS跳過下載某種資源?

,但我想要更多,

我如何控制phantomjs跳過下載某種資源,

如CSS等...

== ===

好消息: 此功能已添加。

https://code.google.com/p/phantomjs/issues/detail?id=230

要點:

page.onResourceRequested = function(requestData, request) { 
    if ((/http:\/\/.+?\.css/gi).test(requestData['url']) || requestData['Content-Type'] == 'text/css') { 
     console.log('The url of the request is matching. Aborting: ' + requestData['url']); 
     request.abort(); 
    } 
}; 
+0

我也想知道這一點,如何讓phantomjs跳過特定資源 – iwek 2012-06-05 20:35:10

+3

好消息:加入此功能。 – atian25 2013-01-05 07:53:34

+3

@ user2864740爲什麼將它編輯到問題中而不作爲答案發布? – 2014-08-14 08:07:32

回答

7

所以最後你可以試試這個http://github.com/eugenehp/node-crawler

否則你仍然可以嘗試用PhantomJS

下面的方法最簡單的辦法,就是要加載頁面 - >解析頁面 - >排除不需要的資源 - >將其加載到PhatomJS中。

另一種方法是僅阻止防火牆中的主機。

(可選)您可以使用代理來阻止某些URL地址並向其查詢。

另外一個,加載頁面,然後刪除不需要的資源,但我認爲它不是正確的方法在這裏。

+0

我想知道爲什麼PhatomJS不這樣做?有時候,我們需要加載大量的頁面而沒有使用css/img,不能手動排除不需要的資源 – atian25 2012-06-18 04:02:50

+0

有一些像page.content這樣的事情,你可以使用正則表達式過濾器來處理它的某種過濾資源(css,js )。或者,您可以簡單地抓取網頁並僅解析您想要離開的圖像。 – 2012-06-18 07:27:27

+0

感謝您的回覆。你的意思是說Phantomjs提供了一些過濾器接口/ API,我們可以跳過某種資源?(不要再下載了)。 api名稱是什麼? – atian25 2012-06-19 01:03:15

3

現在沒有辦法(phantomjs 1.7),它不支持。

但討厭的解決方案是使用HTTP代理,這樣你就可以篩選出你不需要

+0

當然這是最好的解決方案,順便說一句,你應該總是使用代理(或清漆魷魚)「控制」你的節目下載(加入排隊,緩存等....) – 2013-06-25 13:46:15

6

使用page.onResourceRequested有一定的要求,例如如在loadurlwithoutcss.js

page.onResourceRequested = function(requestData, request) { 
    if ((/http:\/\/.+?\.css/gi).test(requestData['url']) || 
      requestData.headers['Content-Type'] == 'text/css') { 
     console.log('The url of the request is matching. Aborting: ' + requestData['url']); 
     request.abort(); 
    } 
}; 
14

更新工作!

由於PhantomJS 1.9,現有的答案沒有奏效。您必須使用此代碼:如果您使用中止(),而不是取消()

var webPage = require('webpage'); 
var page = webPage.create(); 

page.onResourceRequested = function(requestData, networkRequest) { 
    var match = requestData.url.match(/wordfamily.js/g); 
    if (match != null) { 
    console.log('Request (#' + requestData.id + '): ' + JSON.stringify(requestData)); 
    networkRequest.cancel(); // or .abort() 
    } 
}; 

,就會觸發onResourceError。

可以look at the PhantomJS docs

+0

phantomjs 2.1.1沒有取消()剛剛中止() – waza123 2016-09-12 20:51:53

+0

@ waza123必須反正工作 – webo80 2017-02-03 08:19:58