问题
I'm trying to add cookies to a browser, but getting the following error:
Message: invalid argument: invalid 'expiry' (Session info: chrome=75.0.3770.90)
This code shows how I load and add cookies.
for cookie in pickle.load(open(r'{0}\{1}_cookie.pkl'.format(settings.COOKIES_PATH, self.tv_username), 'rb')):
self.browser.add_cookie(cookie)
Values of the cookies:
{'__utmc': '226258911', '_sp_id.cf1a': '0b243b32-8dee-46d9-a243-bb4d2bfcb805.1560942815.1.1560942821.1560942815.5941cbc0-0500-4a17-8f6c-4ee3f133f67c', 'km_vs': '1', '__utmt': '1', '__utma': '226258911.510671571.1560942814.1560942814.1560942814.1', 'km_ai': 'm6caeIAUtEqx%2BIWda%2F7klZER%2F1Y%3D', 'kvcd': '1560942821112', '__utmb': '226258911.2.10.1560942814', 'km_lv': '1560942821', '__utmz': '226258911.1560942814.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)', 'etg': 'undefined', '_sp_ses.cf1a':'*'}
It worked fine with previous version of chrome. Any help would be appreciated!
回答1:
The problem is that you are trying to add the cookies with a different format than the selenium expects.
The python selenium api reference says that you have to insert the cookies with a dict like that
driver.add_cookie({'name' : 'foo', 'value' : 'bar'})
So you have to adapt your loop to use a key,value format
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})
回答2:
In my case, the previous answer did not work. I had to remove the expire key from the object.
for cookie in pickle.load(open(PATH, "rb")):
if 'expiry' in cookie:
del cookie['expiry']
self.driver.add_cookie(cookie)
This happens if you previously pickled the cookies directly as they're returned from the driver, like so:
pickle.dump(browser.get_cookies(), open(PATH, "wb"))
来源:https://stackoverflow.com/questions/56663666/how-to-fix-invalid-argument-invalid-expiry-in-selenium-when-adding-cookies