如何在转到之前设置Cookie?

时间:2019-08-01 07:36:03

标签: ruby selenium selenium-webdriver watir

我正在使用Watir 6.16.5和Selenium 3.142.3:

b = Watir::Browser.new(driver)
b.cookies.add('foo', 'Hello, world!', domain: 'www.example.com')
b.goto('http://www.example.com')

我要设置cookie,然后 进入网站 cookie设置。但是,我得到了:

Selenium::WebDriver::Error::InvalidCookieDomainError: Document is cookie-averse
            WebDriverError@chrome://marionette/content/error.js:179:5
            InvalidCookieDomainError@chrome://marionette/content/error.js:317:5
            GeckoDriver.prototype.addCookie@chrome://marionette/content/driver.js:2641:11

我在做什么错? This可能相关,但是解决方法是什么?

2 个答案:

答案 0 :(得分:4)

您必须在同一域中才能设置cookie。从W3C specs

  

如果当前浏览上下文的document元素是cookie厌恶的   文档对象,返回错误,错误代码的cookie域无效。

invalid cookie domain

中对此也有解释
  

非法尝试在其他域下设置Cookie   比当前页面。

一种解决方法是在域中设置cookie后简单地刷新页面

b = Watir::Browser.new(driver)
b.goto('http://www.example.com')
b.cookies.add('foo', 'Hello, world!', domain: 'www.example.com')
b.refresh

答案 1 :(得分:0)

您好,我可以在python中为解决方案提供如何处理Cookie的方法,希望对您有所帮助。

一旦获得cookie,就可以将其存储为:

    with open("cookies.pkl","wb") as cookies:
        pickle.dump(driver.get_cookies(),cookies)

注意:需要导入泡菜以将文件存储为泡菜文件

获取Cookie:

def handle_cookies():
    with open("cookies.pkl","rb")as cookies:
        cookie = pickle.load(cookies)
        for ck in cookie:
            driver.add_cookie(ck)

调用此函数时,它将处理cookie