“无效的参数:无效的“到期””
我正在尝试将Cookie添加到浏览器,但是出现以下错误: 将Cookie添加到chromedriver中时,如何解决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)
答案 0 :(得分:2)
首先点击评论链接,将泡菜更改为字典
另请参阅
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)
答案 1 :(得分:2)
较新版本的chromedriver拒绝“过期”值的原因是由于此更改:https://chromium.googlesource.com/chromium/src/+/c83119b466cfd63fd1eb616ee86b22ede5db3c4e%5E%21/#F4
当chromedriver处于w3c兼容模式时,它现在要求“ expiry”为int64,而在旧模式下,它将继续接受旧的float值。
问题(可能是chromedriver中的错误)是driver.get_cookies()
继续以浮点数返回“过期”值,而driver.add_cookie(...)
不接受这些cookie。
因此,为了解决这个问题,您有两种选择:
cookie["expiry"] = int(cookie["expiry"]*1000)
,然后将其传递给driver.add_cookie(...)
或
from selenium import webdriver
opt = webdriver.ChromeOptions()
opt.add_experimental_option('w3c', False)
driver = webdriver.Chrome(chrome_options=opt)
答案 2 :(得分:0)
此问题已在ChromeDriver-83中修复 并发布了该版本:
Resolved issue 3331: The get_cookies() method is returning 'expiry' keys of type double, but should be int64 in w3c mode