【问题标题】:Selenium Chromedriver add cookie - invalid domain errorSelenium Chromedriver 添加 cookie - 无效域错误
【发布时间】:2017-05-24 09:25:09
【问题描述】:

我正在尝试存储和上传我通过 selenium 从网页检索到的 cookie。

我是 cookie 的新手,所以请告诉我我做错了什么。我正在努力学习。

我用 selenium 打开一个页面,手动登录,执行一些操作然后等待..(我的代码设置为在 30 秒后获取 cookie)

print "adding cookies now"
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
    driver.add_cookie(cookie)

之后,我的 cookies.pkl 文件如下所示:

(lp0
(dp1
Vdomain
p2
V.twitter.com
p3
sVsecure
p4
I00
sVvalue
p5
V"v3:1484006785862560132892059"
p6
sVexpiry
p7
F1531267585.126113
sVpath
p8
# more lines

log_in_and_store() 之后,我尝试在加载此 cookie 时使用 selenium 重新打开页面。如果正确完成,它应该打开到我离开的页面!不是登录页面。

当我尝试像这样将我的 cookie 上传到网页时:

driver.get('http://www.website.com')
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
    print cookie
    driver.add_cookie(cookie)

add_cookies 抛出这个错误:

selenium.common.exceptions.WebDriverException:消息:cookie 无效 域:无效域:“.twitter.com”(会话信息: chrome=55.0.2883.95) (驱动信息: chromedriver=2.24.417412 (ac882d3ce7c0d99292439bf3405780058fcca0a6),平台=Mac OS X 10.12.1 x86_64)

我已经试过了,所以请不要链接我(Selenium addCookie getting Invalid Cookie Domain Exception even though I'm on the right domain)

我还尝试过更改 chromedriver 版本,将我的代码更改一百万次并将我的头撞到墙上。这些都不起作用。

请帮忙,非常感谢

【问题讨论】:

    标签: python selenium cookies selenium-webdriver pickle


    【解决方案1】:

    我在 Py selenium 中也遇到了这个错误。

    解决办法是: 首先访问您尝试添加其 cookie 的网站的主页。

        # first visit home page
        url = "https://www.website.com"
        driver.get(url)
    
        # add cookies from pickled-txt or a txt file
        cookies = pickle.load(open("cookies.pkl", "rb"))
        for cookie in cookies:
            driver.add_cookie(cookie)
    
        # visit again and you shall see your account logged in
        url = "https://www.website.com"
        driver.get(url)
    

    原因是:

    1. 使用默认 url data: 初始化 Selenium webdriver。
    2. add_cookie 要求当前 url 在 cookie 的域模式下。
    3. data: 不会匹配任何 cookie 域

    所以,你得到invalid cookie domain 错误。

    【讨论】:

      【解决方案2】:

      我非常担心这个错误,就像其他答案所暗示的那样,我们首先必须加载页面,然后我们必须加载 cookie,然后再次加载页面,瞧。

      import pickle
      from selenium import webdriver
      
      def save_cookie(driver):
          with open("cookie", 'wb') as filehandler:
              pickle.dump(driver.get_cookies(), filehandler)
      def load_cookie(driver):
           with open("cookie", 'rb') as cookiesfile:
               cookies = pickle.load(cookiesfile)
               for cookie in cookies:
                   print(cookie)
                   driver.add_cookie(cookie)
      
      driver = webdriver.Chrome(ChromeDriverManager().install())
      url = 'https://www.example.com'
      driver.get(url)
      load_cookie(driver)
      # Do you task here 
      save_cookie(driver)
      driver.quit()
      

      【讨论】:

        猜你喜欢
        • 2019-11-01
        • 2019-11-17
        • 1970-01-01
        • 1970-01-01
        • 2019-09-25
        • 2020-04-03
        • 2015-09-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多