0

このトピックに関連して見つけたすべての質問を読みましたが、役に立たなかったり関連したものはありませんでした。

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 をロードできた人はいますか?

4

0 に答える 0