25

特定の URL にアクセスするには認証が必要です。ブラウザでログインする必要があるのは 1 回だけです。Cookie のセッション ID を使用できる他の関連 URL は、ログイン ページに移動する必要がないためです。--cookies-file=cookies.txt同様に、 phantomjs のコマンドラインで使用する Cookie ファイルで生成された Cookie を使用して、同じ Cookie 詳細を必要とする他のページを開くことはできますか。

提案してください。

4

2 に答える 2

29

Phantom JS と Cookie

--cookies-file=cookies.txt非セッション Cookie のみを Cookie jar に保存します。ログインと認証は、より一般的にはセッション Cookie に基づいています。

セッション Cookie はどうですか?

これらを保存するのは非常に簡単ですが、すぐに期限切れになる可能性があることを考慮する必要があります。

これを考慮するには、プログラム ロジックを記述する必要があります。例えば

  1. cookiejar から Cookie をロードする
  2. URL にアクセスして、ユーザーがログインしているかどうかを確認します
  3. ログインしていない場合

    ログインし、cookie を cookiejar に保存します

  4. 処理を続行する

var fs = require('fs');
var CookieJar = "cookiejar.json";
var pageResponses = {};
page.onResourceReceived = function(response) {
    pageResponses[response.url] = response.status;
    fs.write(CookieJar, JSON.stringify(phantom.cookies), "w");
};
if(fs.isFile(CookieJar))
    Array.prototype.forEach.call(JSON.parse(fs.read(CookieJar)), function(x){
        phantom.addCookie(x);
    });

page.open(LoginCheckURL, function(status){
 // this assumes that when you are not logged in, the server replies with a 303
 if(pageResponses[LoginCheckURL] == 303)
 {  
    //attempt login
    //assuming a resourceRequested event is fired the cookies will be written to the jar and on your next load of the script they will be found and used
 }


});
于 2014-06-12T12:10:24.110 に答える