2015-03-02 89 views
0

在網絡抓取練習中,我需要單擊鏈接,讓它們呈現內容(如果是html)並以其他方式下載它。我如何用幻影/ slimerjs上的casperjs或其他工具完成此任務?根據casperjs中的mimetype下載文件

據我所知,幻影/ slimerjs缺乏支持下載的API。 casperjs有一個下載API,但我無法看到如何檢查MIME類型,並讓HTML呈現下載其他內容。

+0

@tripleee我編輯了我的問題,包括我的研究。我的問題是獨立的,據我所知,它有一個複雜的問題,在整個Web上的常見例子中沒有提到。我認爲它不值得投反對票。 – 2015-03-02 11:19:02

+0

爲了記錄,我不是downvoter。我沒有仔細研究過這個問題,但是不允許瀏覽器對點擊鏈接採取默認行動嗎? – tripleee 2015-03-02 11:47:41

+0

@tripleee謝謝。我正在使用的上述工具沒有針對非Web內容的默認操作,例如pdf,應用程序二進制文件等。 – 2015-03-02 12:05:38

回答

2

在這兩種PhantomJS和SlimerJS可以註冊監聽到的每個接收到的響應:

page.onResourceReceived = function(response) { 
... 
} 

然而,只有在SlimerJS是response.body定義。通過使用這個你可以保存文件。 this blog post有一個完整的例子。 (如該示例所示,您必須設置page.captureContent來覆蓋您想要的數據文件。)

在PhantomJS 1.9.x中沒有辦法做到這一點(我相信PhantomJS 2.x仍然存在相同的問題,但我還沒有親自證實過)。

你的問題的另一部分是關於決定什麼保存基於MIME類型。 full list of available fields顯示您可以使用response.contentType

+0

非常好,謝謝你的回答和博客文章鏈接。一旦我回到它,我會測試它。 – 2015-03-11 20:59:10