【问题标题】:How can i fix “invalid argument: invalid 'expiry'” in Selenium when adding cookies to a chromedriver?向 chromedriver 添加 cookie 时,如何修复 Selenium 中的“无效参数:无效的‘过期’”?
【发布时间】:2019-11-17 15:00:59
【问题描述】:

“无效参数:无效的‘到期’”

我正在尝试将 cookie 添加到浏览器,但出现以下错误: 向 chromedriver 添加 cookie 时如何修复 Selenium 中的“无效参数:无效的 'expiry'”?

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

driver.get ( URL )
sleep ( 2 )

cookies = pickle.load(open("cookies.pkl", "rb")) 
for cookie in cookies: 
    driver.add_cookie(cookie)
    sleep(2)

driver.get ( URL )

print(driver.get_cookies())
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))

错误信息

selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid 'expiry'
  (Session info: chrome=75.0.3770.100)

【问题讨论】:

标签: selenium cookies pickle


【解决方案1】:

首先点击评论中的链接将pickle更改为dict
另请参阅此
https://www.w3.org/TR/webdriver/#add-cookie 第 6 点
到期现在应该是 int 而不是 float

for cookie in cookies:
    if isinstance(cookie.get('expiry'), float):
        cookie['expiry'] = int(cookie['expiry'])
    driver.add_cookie(cookie)

【讨论】:

    【解决方案2】:

    'expiry' 值被较新版本的 chromedriver 拒绝的原因是由于此更改:https://chromium.googlesource.com/chromium/src/+/c83119b466cfd63fd1eb616ee86b22ede5db3c4e%5E%21/#F4

    当您的 chromedriver 处于 w3c 兼容模式时,它现在要求 'expiry' 为 int64,而在旧模式下它将继续接受旧的浮点值。

    问题(可能是 chromedriver 中的错误)是 driver.get_cookies() 继续以浮点数形式返回“过期”值,而 driver.add_cookie(...) 不接受这些 cookie。

    因此,要暂时解决此问题,您有两种选择:

    1. 将过期密钥转换为整数(将它们乘以 1000 得到毫秒):cookie["expiry"] = int(cookie["expiry"]*1000),然后将它们传递给 driver.add_cookie(...)

    1. 通过向 ChromeOptions 添加实验性标志,在您的 chromedriver 会话中禁用 w3c 合规性:
    from selenium import webdriver
    
    opt = webdriver.ChromeOptions()
    opt.add_experimental_option('w3c', False)
    driver = webdriver.Chrome(chrome_options=opt)
    

    【讨论】:

    【解决方案3】:

    此问题已在 ChromeDriver-83 中修复 并发布版本:

    Resolved issue 3331: The get_cookies() method is returning 'expiry' keys of type double, but should be int64 in w3c mode
    

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 2017-05-24
      • 2019-12-20
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 2022-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多