将Cookie添加到chromedriver中时,如何解决Selenium中的“无效参数:无效'expiry'”?

时间:2019-06-19 08:49:58

标签: python selenium selenium-chromedriver

我正在尝试将cookie添加到浏览器,但是出现以下错误:

消息:无效参数:无效的“到期” (会话信息:chrome = 75.0.3770.90)

此代码显示了我如何加载和添加cookie。

@Input()
set selectMode(mode: number) {
  setTimeout(() => this.mode = mode);
}

cookie的值:

for cookie in pickle.load(open(r'{0}\{1}_cookie.pkl'.format(settings.COOKIES_PATH, self.tv_username), 'rb')):
    self.browser.add_cookie(cookie)

它与以前版本的chrome兼容。任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:13)

在我的python和selenium版本中,我发现Selenium如何输出cookie到期值和如何导入它们之间存在差异。当您使用

driver.get_cookies()

驱动程序可以输出浮点数而不是整数的到期值。这些浮点似乎是新纪元的时间单位(自1970年1月1日以来的秒数)。如果您尝试将这些确切的cookie添加回驱动程序中,它们将失败,因为驱动程序仅接受具有整数到期值的cookie。在这一行:

driver.add_cookie({'name': name, 'value': value, 'expiry': expiry})

有效期的值必须是整数。否则,您将获得值错误。我使用以下代码修复了该问题。

# Saving current cookies and reformatting them
cookies = driver.get_cookies()
for cookie in cookies:
    if 'expiry' in cookie:
        cookie['expiry'] = int(cookie['expiry'])
    # Adding cookies back into the driver
    driver.add_cookie(cookie)

这对我有用,而且我不再遇到错误。

答案 1 :(得分:2)

这是由chromedriver中的活动错误引起的:https://bugs.chromium.org/p/chromedriver/issues/detail?id=3331

错误是chromedriver返回expiry为双精度的get_cookies cookie,但不返回add_cookie为它的double。解决方法:

for cookie in pickle.load(open('cookies.pkl', 'rb')):
    expiry = cookie.get('expiry', None)

    if expiry:
      cookie['expiry'] = int(expiry * 1000)
    browser.add_cookie(cookie)

答案 2 :(得分:1)

问题是您要添加的硒格式与硒所期望的格式不同。

python selenium api reference说,您必须使用这样的字典插入cookie

driver.add_cookie({'name' : 'foo', 'value' : 'bar'})

因此,您必须调整循环以使用键,值格式

for key, value in pickle.load(open(r'{0}\{1}_cookie.pkl'.format(settings.COOKIES_PATH, self.tv_username), 'rb')):
    self.browser.add_cookie({'name' : key, 'value' : value})

答案 3 :(得分:0)

就我而言,先前的答案无效。我必须从对象中删除过期密钥。

 for cookie in pickle.load(open(PATH, "rb")):
     if 'expiry' in cookie:
         del cookie['expiry']

     self.driver.add_cookie(cookie)