web-dev-qa-db-ja.com

PythonでSelenium Webdriverの特定のドメインにCookieを設定する方法は?

StackOverflowユーザーの皆さん、こんにちは。私が達成しようとしているのは、テストでメインページを開いたときに迷惑なヘルパーボックスがポップアップ表示されないようにすることです。これまでのところ、これは私がメインページを開くために使用している方法です。

def open_url(self, url):
    """Open a URL using the driver's base URL"""
    self.webdriver.add_cookie({'name' : 'tour.index', 'value' : 'complete', 'domain' : self.store['base'] + url})
    self.webdriver.add_cookie({'name' : 'tour.map', 'value' : 'complete', 'domain' : self.store['base'] + url})
    self.webdriver.get(self.store['base'] + url)

ただし、テストを実行した後に返されるのは次のとおりです。

2014-07-23 15:38:19.453057: X Message: u'You may only set cookies for the current domain' ;

ベーステストドメインを実際にロードする前にCookieを設定するにはどうすればよいですか?

15
yanki

このドキュメントでは、Cookieを設定する前に、ダミーのURL(404ページや画像へのパスなど)に移動することを推奨しています。次に、Cookieを設定し、メインページに移動します。

Seleniumのドキュメント-Cookie

... Cookieが有効になるドメインにいる必要があります。サイトとのやり取りを開始する前にCookieを事前設定しようとしている場合...別の方法は、サイト上の小さなページを見つけることです...( http://example.com/some404page

したがって、コードは次のようになります。

def open_url(self, url):
    """Open a URL using the driver's base URL"""

    dummy_url = '/404error'
    # Or this
    #dummy_url = '/path/to/an/image.jpg'

    # Navigate to a dummy url on the same domain.
    self.webdriver.get(self.store['base'] + dummy_url)

    # Proceed as before
    self.webdriver.add_cookie({'name' : 'tour.index', 'value' : 'complete', 'domain' : self.store['base'] + url})
    self.webdriver.add_cookie({'name' : 'tour.map', 'value' : 'complete', 'domain' : self.store['base'] + url})
    self.webdriver.get(self.store['base'] + url)
18
Christian Long