【问题标题】:How to set a cookie before the goto?如何在 goto 之前设置 cookie?
【发布时间】:2019-12-09 18:04:10
【问题描述】:

我在 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,然后 然后 转到网站 with 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 可能是相关的,但解决方法是什么?

【问题讨论】:

    标签: ruby selenium selenium-webdriver watir


    【解决方案1】:

    您好,我可以在 python 中给出如何处理 cookie 的解决方案,希望它可以对您有所帮助。

    获得 cookie 后,您可以将其存储为:

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

    注意:需要导入pickle才能将文件存储为pickle文件

    检索 Cookie:

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

    在调用此函数时,它会处理 cookie

    【讨论】:

      【解决方案2】:

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

      如果当前浏览上下文的文档元素是 cookie-averse 文档对象,返回错误,错误代码无效 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
      

      【讨论】:

      • 这里的 foo 和 hello 这个词是什么意思?你能否澄清这个答案,我无法让 cookie 工作,这基本上就是 SO
      • @AliOve 这些是正在设置的 cookie 的名称和值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 2021-08-27
      • 1970-01-01
      • 2019-07-30
      相关资源
      最近更新 更多