ブラウザにCookieを追加しようとしていますが、次のエラーが発生します。
メッセージ:無効な引数:無効な 'expiry'(セッション情報:chrome = 75.0.3770.90)
このコードは、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)
クッキーの値:
{'__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':'*'}
以前のバージョンのChromeでは問題なく動作しました。何か助けていただければ幸いです!
問題は、Seleniumが予期する形式とは異なる形式のCookieを追加しようとしていることです。
python Selenium api reference は、そのようなdictで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})
私の場合、前の回答は機能しませんでした。オブジェクトから有効期限キーを削除する必要がありました。
for cookie in pickle.load(open(PATH, "rb")):
if 'expiry' in cookie:
del cookie['expiry']
self.driver.add_cookie(cookie)
これは、ドライバーから返されたCookieを以前に直接ピクルした場合に発生します。
pickle.dump(browser.get_cookies(), open(PATH, "wb"))
私のバージョンのpythonおよびSeleniumでは、SeleniumがCookieの有効期限値を出力する方法とそれをインポートする方法に違いがあることがわかりました。
driver.get_cookies()
ドライバは、整数ではなく浮動小数点数である有効期限値を出力できます。これらのフロートはエポック時間単位(1970年1月1日からの秒数)のようです。これらの正確なCookieをドライバーに再度追加しようとすると、ドライバーは整数の有効期限値を持つCookieしか受け入れないため、失敗します。この行では:
driver.add_cookie({'name': name, 'value': value, 'expiry': 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
for cookie in cookies:
driver.add_cookie(cookie)
これは私にとってはうまくいきました、そして私はもはやエラーを受け取りません。