如何在Python的Selenium WebDriver中为特定域设置Cookie?

23 投票
1 回答
56422 浏览
提问于 2025-04-18 14:30

大家好,我在这里想和大家分享一下我的问题。我希望在我的测试打开主页面时,能防止那些烦人的帮助框弹出来。目前,我用的方法是这样的来打开主页面:

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呢?

1 个回答

30

文档建议在设置 cookies 之前,先访问一个虚假的网址(比如一个 404 页面,或者一个图片的路径)。然后再设置 cookies,最后再访问你的主页面。

Selenium 文档 - Cookies

... 你需要在 cookie 有效的域名下。如果你想在与网站互动之前预设 cookies ... 另一种方法是找到网站上的一个小页面 ... (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)

撰写回答