Web ページのコンテンツを読み取るためのクローラーを作成するために Selenium を使用するのは非常に一般的な要件です。ただし、制限されたコンテンツをアップロードするためにブログなどの Web ページが表示される場合があります。本はこの例です。次のチャット ウィンドウが表示されます:
Cookie はアカウントにログインした後のログイン情報の記録に使用されるため、そのような Web ページを読むには、最初に手動でログインしてから、Cookie をファイルにエクスポートすることができます。その後、Selenium を使用して Web ページをクロールするときに、エクスポートされた Cookie を再度追加し、Web ページを再編成すると、Web コンテンツを正常に読み取ることができます。
まず、Selenium を使用して読みたい Web ページを開いてください。例としてブログを示します。
>>> from selenium import webdriver >>> driver = webdriver.Edge() >>> driver.get('https://www.books.com.tw')
この時点では、通常の手順に従ってメンバーとしてログインし、cookie_editor プラグインをインストールしてください:
必ずブログのホームページに戻り、プラグインを使用してすべての Cookie を JSON 形式でエクスポートしてください:
Cookie の内容がクリップボードにコピーされます。テキスト エディターに貼り付けて、ご自身でアーカイブしてください。
次に、Selenium を閉じて、再度開きます。
>>> from selenium import webdriver >>> driver = webdriver.Edge() >>> driver.get('https://www.books.com.tw')
Cookie を追加するには、Cookie と同じドメインの Web ページにアクセスしている必要があります。そのため、Web ページにアクセスするには、最初にブログを開いてください。次に、Cookie を保存するファイルを開いて Python 辞書にロードできます:
>>> import json >>> with open('cookies.json') as f: ... cookies = json.load(f)
Cookie を 1 つずつ追加して戻します:
>>> for cookie in cookies: ... driver.add_cookie(cookie)
この時点で、次のエラーが表示されるはずです:
Traceback (most recent call last): File "<stdin>", line 3, in <module> File "C:\Users\meebo\code\python\poetry_env\py310\.venv\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 670, in add_cookie assert cookie_dict["sameSite"] in ["Strict", "Lax", "None"] AssertionError
これは、Cookie エディターによってエクスポートされたデータでは、sameSite 属性が「no_restriction」を表すために null を使用しているためです。これは、制限がなく、同じ Web サイトである必要があることを意味しますが、Selenium は「Strict」、「Lax」のみを認識します。 "、"None" したがって、これら 3 つの制限はエラーとして診断されます。JSON ファイルを手動で変更し、すべての SameSite 属性値を "None" に変更する必要があります (文字列であることに注意してください)。また、ドメインが「.books.com」ではありません。 Cookie の削除:
[ { "domain": ".books.com.tw", "expirationDate": 1767941747.633402, "hostOnly": false, "httpOnly": false, "name": "_ga_TR763QQ559", "path": "/", "sameSite": null, "secure": false, "session": false, "storeId": null, "value": "GS1.1.1733381542.1.1.1733381747.0.0.0" }, ... { "domain": ".books.com.tw", "expirationDate": 1748933733, "hostOnly": false, "httpOnly": false, "name": "__eoi", "path": "/", "sameSite": "no_restriction", "secure": true, "session": false, "storeId": null, "value": "ID=7f42c4647467b5fb:T=1733381733:RT=1733381733:S=AA-AfjbpJCe1kw2klEX0xW55n9CY" }, ... ]
変更後、リロードして Cookie を追加すると、エラーは発生しなくなります。
Cookie を追加した後も、表示される画面はまだログインしていない画面です:
Cookie を有効にするには、ページを更新する必要があります:
>>> driver.refresh()
表示されるのは、メンバーとしてログインするためのページです:
このようにして、Selenium を使用して、メンバーのログインが必要なページを読み取ることができます。
最後に思い出していただきたいのは、Cookie は有効であるということです。一定期間が経過しても以前に保存された Cookie を使用してログインできない場合は、上記の手順に従って Cookie を再度取得してください。
以上がSelenium を使用してメンバーのログインが必要な Web ページを読み取るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。