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
Libérer: 2024-12-08 10:22:15
original
729 Les gens l'ont consulté

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')
Copier après la connexion
Copier après la connexion

À 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')
Copier après la connexion
Copier après la connexion

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)
Copier après la connexion

Ajoutez les cookies un par un :

>>> for cookie in cookies:
...     driver.add_cookie(cookie)
Copier après la connexion

À 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
Copier après la connexion

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"
    },
    ...
]
Copier après la connexion

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()
Copier après la connexion

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!

source:dev.to
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal