1

QTWebKit クライアントを経由せずに PhantomJS (または CasperJS) でファイルをダウンロードする方法はありますか?

テスト対象のページとは関係のない URL から、JSON でエンコードされたデータをダウンロードしたいと考えています。

PhantomJS API または CasperJS API の機能は、不気味なクライアントで URL を開くことを目的としているように見えるため、これを行う方法は明らかではありません。

次のようなものを単純に実行できると思います。

  fetch(URL, callback);

PhantomJs ページにダウンロードしてからクライアントにダウンロードするという通常の手順には、2 つの理由で問題があります。まず、遅くて面倒です。2 つ目は、同一生成元ポリシーに違反しています (そのため、CasperJS のbase64encode関数は機能しません)。

基本的には、PhantomJS クライアント用の JavaScript ランナーが XMLHttpRequest (またはそれに類するもの) を実装することを期待していますが、もう少し標準的なものが利用できるのではないかと思います。

編集

おそらく、jQuery を含めて を使用することもできます$.ajaxが、残念ながら、同じオリジンの例外もスローされます。

XMLHttpRequest はhttp://example.com:5000/testを読み込めません。オリジン file:// は Access-Control-Allow-Origin で許可されていません。

私が思いつく唯一の解決策は、JSON でアクセスしたいファイルを別のプロセス (wget などを使用) でダウンロードすることですが、PhantomJSはプロセスの実行を許可していないため(この記事の執筆時点)、 PhantomJS とは別に開始する必要があります。

4

1 に答える 1

2

あなたは見てみることができます

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

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

ダウンロードしたデータで何をしたいのかという質問からはわかりませんが、テスト対象のページでそのデータを使用するために、PhantomJS を使用するinjectJS()includeJS()、ローカル ファイルを渡すことができます。

于 2012-10-14T19:17:42.467 に答える