このトピックに関連して見つけたすべての質問を読みましたが、役に立たなかったり関連したものはありませんでした。
Asyncio と aiohttp で playwright を使用して、いくつかの Web ベースのタスクを自動化しています。そのワークフローの一部には、Cookie の取得と再利用が含まれます。私はプレイライトを使用context.storage_state()
して、ストレージからすべてを取得します。dict
次のように、ストレージ内のすべてを含む を返します。
{
"cookies": [
{
'name': 'cookie_name',
'value': 'cookie_value',
'domain': '.website.com',
'path': '/',
'expires': 1234567890,
'httpOnly': False,
'secure': False,
'sameSite': 'None'
},
...
],
"origins": [
{
"origin": "https://www.website.com",
"localStorage": [
{
"name": "name",
"value": "value"
},
...
]
}
]
}
を使用して Cookie を取得し、storage['cookies']
それらをループして、それぞれを に追加しようとします。これは単なるオブジェクトaiohttp.CookieJar()
であると確信しています。http.cookiejar.CookieJar()
これらのdictの1つをCookieとしてCookie jarにロードしようとするたびに、
CookieError: Attempt to set a reserved key 'domain'
RFC2109 標準とソース コードを見てきました: https://github.com/python/cpython/blob/3.9/Lib/http/cookies.py
何を試してもエラーが発生します。
私が試してみました:
jar = aiohttp.CookieJar() # basically http.cookiejar.CookieJar I think
storage = context.storage_state()
for cookie in storage['cookies']:
jar.update_cookies(cookie)
for item in storage['cookies']:
cookie = BaseCookie().load(str(item)) # not even sure why I tried this
jar.update_cookies(cookie)
for item in storage['cookies']:
cookie = BaseCookie().load(item)
jar.update_cookies(cookie)
for item in storage['cookies']:
cookie = SimpleCookie().load(item)
jar.update_cookies(cookie)
また、Cookie dict からすべての「予約済み」キーを削除しようとしましたが、それが Cookie のデータの大部分です。実際の Cookie を Cookie jar にロードすることはできません。私はHTTP cookie.pyのソースコードとドキュメントを読みましたが、私がしていることの何が問題なのかを説明できる限り、そこには何もありません。
セッションを介さずに Cookie jar オブジェクトに Cookie をロードできた人はいますか?