2012-10-14 36 views
1

有沒有方法可以在不通過QTWebKit客戶端的情況下在PhantomJS(或CasperJS)中下載文件?在PhantomJS中檢索URL,而不是通過客戶端

我想從與測試頁面無關的URL下載以JSON編碼的數據。

從PhantomJS API或CasperJS API中看不出它是如何做到這一點的,因爲它們的功能似乎適用於在幽靈客戶端中打開URL。

我希望,人們可以簡單地運行是這樣的:

fetch(URL, callback); 

下載到PhantomJs頁面,然後到客戶端的普通課程的原因有兩個問題。首先,它很慢,很麻煩。其次,它違反了同源政策(所以CasperJS base64encode函數將不起作用)。

從最基本的角度來說,我期望PhantomJS客戶端的javascript runner會實現XMLHttpRequest(或類似的東西),但我不知道是否有更多規範的東西可用。

編輯

或許有可能只是包括jQuery和使用$.ajax,但不幸的是拋出一個相同來源的異常,以及:

的XMLHttpRequest無法加載http://example.com:5000/test。原始文件://不被Access-Control-Allow-Origin允許。

唯一的解決辦法我能想出是下載我想在JSON訪問一個單獨的進程中的文件(例如使用wget的),但由於PhantomJS does not permit execution of processes(本文寫作時),它似乎是它必須與PhantomJS分開啓動。

+2

您是否嘗試使用'--web-security = no'選項?這在理論上將允許繞過CORS策略。 – NiKo

+0

@NiKo:''--web-security = no''僅在''page''上下文中禁用同源策略,而不是在幻像本身中。 – prayerslayer

回答

2

你可以嘗試尋找

casper.download(String url, String target[, String method, Object data]) 

http://docs.casperjs.org/en/latest/modules/casper.html#download

我是從這個問題不清楚,你會想用下載的數據做什麼,但你可以再使用PhantomJS」 injectJS()includeJS()並傳入本地文件以便在正在測試的頁面中使用該數據。

+0

感謝您的職位六角。對不起,但'下載'功能沒有完成所需的功能。它將遠程資源保存到文件系統中。我希望的功能是將任意資源(即遠程系統不可用的資源)下載到內存(而不是文件系統)。不過,我欣賞這篇文章。 –

+0

幻影可以訪問本地文件系統。因此,您可以輕鬆下載文件,使用PhantomJS將其打開,然後使用injectJS()將其注入到任何上下文中。 – Indolering

相關問題