ホームページ >バックエンド開発 >Python チュートリアル >Selenium を使用してメンバーのログインが必要な Web ページを読み取る

Selenium を使用してメンバーのログインが必要な Web ページを読み取る

DDD
DDDオリジナル
2024-12-08 10:22:15753ブラウズ

Web ページのコンテンツを読み取るためのクローラーを作成するために Selenium を使用するのは非常に一般的な要件です。ただし、制限されたコンテンツをアップロードするためにブログなどの Web ページが表示される場合があります。本はこの例です。次のチャット ウィンドウが表示されます:

使用 selenium 讀取需要登入會員的網頁

Cookie はアカウントにログインした後のログイン情報の記録に使用されるため、そのような Web ページを読むには、最初に手動でログインしてから、Cookie をファイルにエクスポートすることができます。その後、Selenium を使用して Web ページをクロールするときに、エクスポートされた Cookie を再度追加し、Web ページを再編成すると、Web コンテンツを正常に読み取ることができます。

Cookieをエクスポートする

まず、Selenium を使用して読みたい Web ページを開いてください。例としてブログを示します。

>>> from selenium import webdriver
>>> driver = webdriver.Edge()
>>> driver.get('https://www.books.com.tw')

この時点では、通常の手順に従ってメンバーとしてログインし、cookie_editor プラグインをインストールしてください:

使用 selenium 讀取需要登入會員的網頁

必ずブログのホームページに戻り、プラグインを使用してすべての Cookie を JSON 形式でエクスポートしてください:

使用 selenium 讀取需要登入會員的網頁

Cookie の内容がクリップボードにコピーされます。テキスト エディターに貼り付けて、ご自身でアーカイブしてください。

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 を追加すると、エラーは発生しなくなります。

Web ページを更新して Cookie を有効にします

Cookie を追加した後も、表示される画面はまだログインしていない画面です:

使用 selenium 讀取需要登入會員的網頁

Cookie を有効にするには、ページを更新する必要があります:

>>> driver.refresh()

表示されるのは、メンバーとしてログインするためのページです:

使用 selenium 讀取需要登入會員的網頁

このようにして、Selenium を使用して、メンバーのログインが必要なページを読み取ることができます。

最後に思い出していただきたいのは、Cookie は有効であるということです。一定期間が経過しても以前に保存された Cookie を使用してログインできない場合は、上記の手順に従って Cookie を再度取得してください。

以上がSelenium を使用してメンバーのログインが必要な Web ページを読み取るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。