2012-02-29 3 views
31

PhantomJSはクッキーをサポートしていますか?はいの場合は、APIの詳細はどこにありますか?PhantomJSはクッキーをサポートしていますか?

しばらく検索してもわかりません。

+0

はい、ブラウザのようなクッキーをサポートしていますが、APIはどういう意味ですか? –

+0

どのようにしてクッキーの価値を得るのですか? document.cookieは何も得られないようです。 – Niyaz

+1

document.cookieはphontomjsを除くすべてのブラウザで動作しますが、いくつかのバグがあるようですが、ネイティブAPIを追加する予定ですhttp://code.google.com/p/phantomjs/issues/detail?id=354&start=100 –

答えて

40

はい、1.7のように、ファントムは完全なクッキー処理を持ち、デフォルトで有効になっています。クッキーはプロセスの存続期間中保持されます。

ファントムの実行中にCookieを保持する場合は、command-line option cookies-fileがあり、永続的なCookieを保存する場所を指定できます。

--cookies-file=/path/to/cookies.txtは、永続的なCookieを保存するファイル名を指定します。

ページスクリプトでは、通常のdocument.cookieプロパティを使用できます。ブラウザーと同様に、このプロパティーは、HTTPヘッダーCookie:で送信される文字列と同様の文字列を返します。

Phantomスクリプトでは、page.cookiesによってページのCookieにアクセスできます(通常の発信元の制限に従います)。オブジェクトを返します。

phantom.cookiesを使用してすべてのCookie(すべてのドメインから)にアクセスすることもできます。 add/edit/delete cookies

var page = require('webpage').create(); 
page.open('http://example.com', function (status) { 
    page.evaluate(function() { 
     document.cookie; // => "test=test-value;" 
    }); 
    page.cookies; // => [{ 
        // domain: "example.com", 
        // expires: "Wed, 08 Jan 2014 00:00:00 GMT" 
        // httponly: false, 
        // name: "test", 
        // path: "/", 
        // secure: false, 
        // value: "test-value" 
        // }] 
    phantom.cookies; // contains ALL cookies in Phantom's jar 
}); 

addCookiedeleteCookie、及びWebPageオブジェクトまたはphantomオブジェクトのいずれかのclearCookies方法を使用。

WebPageオブジェクトのメソッドを使用すると、ページに表示されるCookieのみが変更されます。他のドメインへのアクセスはブロックされます。

しかし、のクッキーメソッドを使用すると、すべてクッキーにアクセスできます。 phantom.addCookieにはドメインが必要です(指定しない場合はWebPage.addCookieは現在のドメインとみなされます)。phantom.deleteCookieは指定された名前と一致するののいずれかのクッキーを削除します。

+0

それは私が 'console.log(document.cookie);を実行したときに実行されます。 – Niyaz

+0

@Niyazはい私はちょうどそれを試み、それがハングアップ、バグをファイルします。 –

+0

ジャスミンユニットテストで使用したときにウィンドウにハングアップしません...しかし、ファンタムは未定義に戻ります。 –

0

私はまだ試していませんが、--cookies-file=/path/to/cookies.txtは動作しませんか?

それはWebPage.addCookie()を通じて、い... API参照して

+0

はい、Cookieを指定されたファイルに書き込みます。特定のクッキーの価値をどのように取り戻すのですか? – Niyaz

+1

はい...クッキーのサポートが完了していないようです:http://code.google.com/p/phantomjs/issues/detail?id=299およびhttp://code.google.com/p/phantomjs/ issues/detail?id = 91 –

10

最初の項目だ - ちなみにが私のためにもsomeone elseもないを動作しません。

あなたは代わりにこれを使用することができます:

phantom.addCookie({ 
    'name': 'mycookie', 
    'value': 'something really important', 
    'domain': 'example.com' 
}) 
page.open('http://example.com/url/path/', function() { 
    console.log(page.cookies); 
}) 
+0

なぜ(匿名の)ダウンボート?このスニペットは何らかの理由で 'WebPage.addCookie()'がうまく動作しない場合にCookieを設定する別の方法を示しています。 – johndodo

0

私は最近、セッション内の情報を傾斜していました。以下のようにページオブジェクトにクッキーを設定する必要があります(coffeescript):

@page.clearCookies() 
@page.addCookie 
    'name'  : "JSESSIONID" 
    'value' : "0000rN3YAlVAU0xdHkKc6BEzWj9:-1" 
    'domain' : 'some.domain.com' 
    'path'  : '/' 
1

私がしなければならない作業は、JavaScriptを直接実行することでした。私はGebを使用しており、以下を行っています。

js.exec("document.cookie='PHPSESSID=${cookie}';") 

セレンがうまくいかないときは、私はいつもjavascriptに戻って機能します。