Selenium + PhantomJS にてクッキーを追加しようとしたさいに「Unable to set Cookie」となる件について

763 views
Skip to first unread message

佐藤裕介

unread,
Nov 4, 2016, 3:45:54 AM11/4/16
to 日本Seleniumユーザーコミュニティ
はじめまして、佐藤裕介と申します。

本日より参加をさせていただきました。

掲題の通り、Selenium + PhantomJSにてクッキーの設定時にエラーとなります。

をはじめとし、いくつかのサイトを参考に、

driver.manage.add_cookie(name: 'XXX', value: 'XXX', domain: 'example.com')

と、

driver.manage.add_cookie({name: 'XXX', value: 'XXX', domain: 'example.com'})

のように設定しましたが、いずれも「Unable to set Cookie」となり、例外で落ちます。

状況としては、以下のスレッドでやりとりされているのが比較的近いかなと思いました。


エラーの原因、および、Seleniumにおける、クッキーの正しい(?)設定方法をご教示いただけませんでしょうか?

よろしくお願いいたします。

以下、必要と思われるバージョン情報を転記します。

不足あれば、ご教示くださると助かります。

$ cat /etc/issue.net
Ubuntu 14.04.5 LTS

$ ruby -v ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-linux-gnu]

$ gem list selenium-webdriver

*** LOCAL GEMS ***

$ phantomjs -v 2.1.1


伊藤望

unread,
Nov 6, 2016, 2:37:25 AM11/6/16
to 日本Seleniumユーザーコミュニティ
はじめまして、伊藤です。

SeleniumのCookieの設定方法としては正しいと思いますが、
PhantomJSのバグか何かのせいで動かないのだと思います。

にJavaScriptを使って問題を回避する方法が載っているので、こちらでうまくいくかもしれません。

2016年11月4日金曜日 16時45分54秒 UTC+9 佐藤裕介:

Kunio Okita

unread,
Nov 7, 2016, 12:23:33 PM11/7/16
to 日本Seleniumユーザーコミュニティ
これはphantomjsのバグで https://github.com/ariya/phantomjs/issues/13409 に起因します。

phantomjs では "example.com" に対してcookieをつけようとすると、
".example.com" に対してcookieをつけてしまいます。
そしてたちの悪いことにphantomjsはこのとき"examle.com"にcookieをつけてないと判定し返り値をfalseで返すので、
ghostdriverがそれをうけて上記のように"Unable to sett Cookie"となります。

実は
manage.driver.add_cookie(name: "xxx", value, "xxx", domain: "example.com") #=> Selenium::WebDriver::Error::UnableToSetCookieError
ってなったあと、rescue して
manage.driver.all_cookies #=> [{:name=>"XXX",  :value=>"XXX",  :path=>"/",  :domain=>".example.com",  :expires=>nil,  :secure=>false}]
と確認すると、".example.com" のdomain属性でcookieがついているということがわかります。

また、manage.driver.add_cookie(name: "xxx", value, "xxx", domain: ".example.com") とはじめから.を先頭につけておくと
付与に成功します。

cookieの仕様的には先頭に.があろうとなかろうと挙動は一緒になるはずなので、
ワークアラウンドとしては.を先頭につけるよう徹底するのがよいと思います。


2016年11月4日金曜日 16時45分54秒 UTC+9 佐藤裕介:

佐藤裕介

unread,
May 12, 2017, 7:50:39 PM5/12/17
to 日本Seleniumユーザーコミュニティ
伊藤さん、佐藤です。

#すみません、半年も経って返信を頂いていたことに気付きました・滝汗

ご教示ありがとうございます。

半年前は、JSを直接叩いてCookieをセットして解決に至りました。

ご連絡頂きありがとうございます。

そして、ご連絡が遅くなり、大変恐縮です。

今後ともどうぞ宜しくお願い致します。

2016年11月6日日曜日 16時37分25秒 UTC+9 伊藤望:

佐藤裕介

unread,
May 12, 2017, 7:52:35 PM5/12/17
to 日本Seleniumユーザーコミュニティ
Okitaさん、佐藤です。

#半年も経ってのレス、大変恐縮です。

以下、大変参考になりました。ありがとうございます。

いまは、JSで直接Cookieを設定しているのですが、最近そのやり方で急に不調になったので、
Okitaさんにご教示頂いた内容も試してみます。

ありがとうございます。

そして、返信が遅くなった(どこの話ではないですが・・)こと、お詫びいたします。

それでは、今後ともどうぞ宜しくお願い致します。

2016年11月8日火曜日 2時23分33秒 UTC+9 Kunio Okita:
Reply all
Reply to author
Forward
0 new messages