我正在尝试将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兼容。任何帮助将不胜感激!
答案 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)