web-dev-qa-db-ja.com

PhantomJSはCookieをサポートしていますか?

PhantomJS はCookieをサポートしていますか?はいの場合、APIの詳細はどこで確認できますか?

しばらく探した後、私はそれを理解することができません。

33
Niyaz

はい、 1.7 現在、Phantomには完全なCookie処理があり、デフォルトで有効になっています。 Cookieは、プロセスの存続期間中保持されます。

Phantomの実行中にCookieを保持したい場合は、 コマンドラインオプションcookies-file があり、永続的なCookieを保存する場所を指定できます。

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

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

Phantomスクリプトでは、objectsを返すpage.cookiesを介して、ページのCookieにアクセスできます(通常のOriginの制限に従います)。

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

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
});

Cookieを追加/編集/削除 するには、addCookieオブジェクトのdeleteCookieclearCookies、およびWebPageメソッドを使用するか、 phantomオブジェクト。

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

ただし、phantomのCookieメソッドを使用すると、allCookieへのアクセスが許可されます。 phantom.addCookieにはドメインが必要です(指定しない場合、WebPage.addCookieは現在のドメインを想定)、phantom.deleteCookieは削除any指定された名前に一致するcookie。

43
josh3736

それは、 WebPage.addCookie() を介して行われます-偶然動作しません他の誰か

代わりにこれを使用できます:

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

私がしなければならなかった回避策は、javascriptを直接実行することでした。 Gebを使用して、次のことを行いました。

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

Seleniumが失敗すると、機能のために常にJavaScriptにフォールバックします。

1
Derek Carr

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

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

まだ試していませんが、_--cookies-file=/path/to/cookies.txt仕事?

[〜#〜] api [〜#〜] reference ...の最初の項目です.

0
Pooria Azimi