Maison >développement back-end >Tutoriel Python >Utilisez Selenium pour lire les pages Web qui nécessitent une connexion membre

Utilisez Selenium pour lire les pages Web qui nécessitent une connexion membre

DDD
DDDoriginal
2024-12-08 10:22:15755parcourir

Il est très courant d'utiliser Selenium pour écrire un robot permettant de lire le contenu d'une page Web. Cependant, vous pouvez rencontrer des pages Web qui nécessitent que vous vous connectiez à votre compte avant d'explorer le contenu. Par exemple, bloguer pour télécharger des informations restreintes. books en est un exemple. Vous verrez la fenêtre de discussion suivante :

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

Étant donné que les cookies seront utilisés pour enregistrer les informations de connexion après la connexion à un compte, afin de lire une telle page Web, nous pouvons d'abord nous connecter manuellement, puis exporter le cookie dans un fichier. Plus tard, lorsque vous utilisez Selenium pour explorer la page Web, ajoutez à nouveau les cookies exportés, réorganisez la page Web et le contenu Web pourra être lu normalement.

Exporter les cookies

Veuillez utiliser Selenium pour ouvrir la page Web que vous souhaitez lire en premier. Voici un blog à titre d'exemple :

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

À ce stade, veuillez vous connecter en tant que membre selon les procédures normales, puis installer le plug-in cookie_editor :

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

Pensez à revenir sur la page d'accueil du blog et à utiliser le plug-in pour exporter tous les cookies au format JSON :

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

Il copiera le contenu du cookie dans le presse-papiers, veuillez le coller dans un éditeur de texte et l'archiver vous-même.

Ré-ajouter des cookies

Puis fermez Selenium et rouvrez-le :

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

Pour ajouter des cookies, vous devez être sur une page Web du même domaine que le cookie, alors n'oubliez pas d'ouvrir d'abord le blog pour accéder à la page Web. Ensuite, vous pouvez ouvrir le fichier qui stocke le cookie et le charger dans un dictionnaire Python :

>>> import json
>>> with open('cookies.json') as f:
...     cookies = json.load(f)

Ajoutez les cookies un par un :

>>> for cookie in cookies:
...     driver.add_cookie(cookie)

À ce stade, vous devriez voir l'erreur suivante :

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

En effet, dans les données exportées par l'éditeur de cookies, l'attribut sameSite utilise null pour représenter "no_restriction", ce qui signifie qu'il n'y a aucune restriction et qu'il doit s'agir du même site Web, mais Selenium ne reconnaît que "Strict", "Lax". ", "Aucun" Ces trois restrictions sont donc diagnostiquées comme des erreurs. Nous devons modifier manuellement le fichier JSON et changer toutes les valeurs des attributs SameSite​​en "Aucun" (notez qu'il s'agit de chaînes). Veuillez également vérifier que le domaine est pas de suppression du cookie ".books.com." :

[
    {
        "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"
    },
    ...
]

Après modification, rechargez et ajoutez les cookies et il n'y aura aucune erreur.

Actualisez la page Web pour permettre aux cookies de prendre effet

Après l'ajout des cookies, l'écran que vous voyez est toujours un écran de non-connecté :

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

La page doit être actualisée pour que le cookie prenne effet :

>>> driver.refresh()

Ce que vous voyez est la page pour vous connecter en tant que membre :

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

De cette façon, vous pouvez utiliser le sélénium pour lire les pages qui nécessitent une connexion membre.

La dernière chose à rappeler est que les cookies sont valides. Si vous ne parvenez pas à vous connecter en utilisant le cookie précédemment stocké après un certain temps, suivez simplement les étapes ci-dessus pour obtenir à nouveau le cookie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn