Obtenez une liste des livres électroniques DMM achetés avec Python + Selenium

Je voulais voir une liste de livres que j'avais achetés auparavant, mais cela ne fonctionnait pas du tout, même après des essais et des erreurs.

"Python Crawling & Scraping [Édition augmentée et révisée] - Guide de développement pratique pour la collecte et l'analyse de données"

J'ai lu, étudié et essayé à nouveau [^ 1].

[^ 1]: Je l'ai vraiment lu, mais le lien de référence était en fait plus utile. Ce livre est inutile car il touche aussi aux lois et règlements.


Code réel et résultat d'exécution

from selenium import webdriver
import time
import dmm_user_pass

#Moyen facile d'éviter les fuites de nom d'utilisateur et de mot de passe
# (Dmm dans le même répertoire_user_pass.Ne jamais publier de py)
USER = dmm_user_pass.USER
PASS = dmm_user_pass.PASS

#Obtenez un pilote Phantom JS
browser = webdriver.PhantomJS()
browser.implicitly_wait(5)

#Accédez à la page de connexion(Vous devriez être redirigé vers la page achetée immédiatement après la connexion)
url_login = "https://accounts.dmm.com/service/login/password"
browser.get(url_login)
print("J'ai visité la page de connexion")

#Entrez des caractères dans la zone de texte
e = browser.find_element_by_id("login_id")
e.clear()
e.send_keys(USER)
e = browser.find_element_by_id("password")
e.clear()
e.send_keys(PASS)
#Soumettre le formulaire
browser.find_element_by_xpath("//form[@name='loginForm']//input[@type='submit']").click()
print("J'ai saisi les informations et appuyé sur le bouton de connexion")
time.sleep(10)

#Afficher les pages achetées pour les livres électroniques DMM
#Si page1 devient une page qui n'existe pas en boucle, l'url sera automatiquement ajoutée.
# https://book.dmm.com/library/?age_limit=all&expired=Devenir 1(La page vers laquelle vous souhaitez effectuer la transition et l'URL actuelle ne correspondent pas)
url_purchased = 'https://book.dmm.com/library/?age_limit=all&expired=1&sort=old&page='
for i in range(1, 100):
    page_i = url_purchased + str(i)
    browser.get(page_i)
    time.sleep(5)
    if page_i != browser.current_url:
        break #Traitement pour quitter selon le commentaire ci-dessus
    #Liste des titres achetés
    links = browser.find_elements_by_css_selector(
        ".m-boxListBookProductBlock__main__info__ttl > a")
    for a in links:
        title = a.text
        print("-", title)
/usr/local/lib/python3.7/site-packages/selenium/webdriver/phantomjs/webdriver.py:49: UserWarning: Selenium support for PhantomJS has been deprecated, please use headless versions of Chrome or Firefox instead
  warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '
J'ai visité la page de connexion
J'ai saisi les informations et appuyé sur le bouton de connexion
-Mob Psycho 100
-dîtes-moi! Galko-chan
(Omis ci-dessous)

L'avertissement sera décrit plus tard.

J'ai pu obtenir une liste des livres achetés avec les e-books DMM dans l'ordre chronologique.

Je pense qu'il est possible d'obtenir un lien ou de gagner de l'argent avec un peu plus d'ingéniosité, mais je ne le ferai pas cette fois car cela prend du temps et c'est gênant. [^ 2]

[^ 2]: les e-books DMM avec plusieurs volumes sont regroupés, donc ceux avec plusieurs volumes sont liés à la page de la série, mais ceux sans volumes multiples sont directement sur la page des détails de l'œuvre. Puisqu'il est lié, il est nécessaire d'y faire une succursale conditionnelle lors de l'acquisition d'un lien ou de l'apport d'une somme d'argent.


Au départ, j'ai pensé à l'exploration avec le module de requêtes, mais je me suis arrêté car je ne pouvais pas me connecter, et je suis heureux d'avoir basculé vers Selenium et que cela a fonctionné.

Étant donné que le sélénium ne provoque que l'opération réelle dans le code, si vous connaissez le nom d'utilisateur, le mot de passe et la position du bouton de connexion (spécifié par la classe et l'ID de la balise html), vous devriez pouvoir vous connecter indépendamment de ce qui est fait en interne. Je pense que Selenium convient à toutes les explorations de sites nécessitant une connexion.


Lien de référence

--Je me suis également référé à ce qui suit [Python3] Scraping via navigateur (pages dynamiques, etc.) [Selenium]

Recommended Posts

Obtenez une liste des livres électroniques DMM achetés avec Python + Selenium
[python] Obtenir une liste de variables d'instance
[Python] Obtenir une liste de dossiers uniquement
Obtenez une liste de fichiers dans un dossier avec python sans chemin
Obtenir une liste d'utilisateurs IAM avec Boto3
Obtenez une liste des packages installés dans l'environnement actuel avec python
Python: obtenir une liste de méthodes pour un objet
Obtenez une liste d'articles publiés par les utilisateurs avec Python 3 Qiita API v2
Comment obtenir une liste de fichiers dans le même répertoire avec python
Obtenez le nombre d'éléments spécifiques dans la liste python
Discord's Python 1.5 ou version ultérieure, je ne parviens pas à obtenir la liste des membres
Comment obtenir une liste d'exceptions intégrées pour python
Obtenez une liste des métriques CloudWatch et une table de correspondance des unités unitaires avec Python boto
Essayez d'obtenir la liste des fils du bulletin d'information (je n'aime pas) avec Python.
J'ai essayé de créer une liste de nombres premiers avec python
Obtenir le code HTML de l'élément avec du sélénium Python
Afficher une liste d'alphabets en Python 3
Obtenez la largeur du div côté serveur avec Selenium + PhantomJS + Python
Python VBA pour obtenir une capture de la page WEB entière avec Selenium
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Recevez une liste des résultats du traitement parallèle en Python avec starmap
[Python] Récupérez les fichiers dans le dossier avec Python
Obtenez un billet pour un parc à thème avec python
Fonctionnement automatique de Chrome avec Python + Sélénium + pandas
[python] Créer une liste de différents types de caractères
Récupérer l'appelant d'une fonction en Python
Copiez la liste en Python
Résolvez A ~ D du codeur yuki 247 avec python
[Python] Débarrassez-vous de la datation avec des expressions régulières
Obtenez des informations sur le processeur de Raspberry Pi avec Python
Obtenez la liste "J'aime" de Qiita en grattant
Touchons une partie de l'apprentissage automatique avec Python
Liste de tâches simple créée avec Python + Django
Zubu amateur veut démarrer Python
Obtenez un environnement de développement Python rapide avec Poetry
Script Python pour obtenir une liste d'exemples d'entrée pour le concours AtCoder
Obtenez le cours de l'action d'une entreprise japonaise avec Python et faites un graphique
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Liste des modules python
ScreenShot avec Selenium (édition Python)
Obtenez date avec python
Grattage avec du sélénium [Python]
Initialiser la liste avec python
Mémo connecté à HiveServer2 d'EMR avec python
Recommandation de construction d'un environnement Python portable avec conda
Obtenez des données financières avec python (puis un peu de bricolage)
Comment écrire un type liste / dictionnaire de Python3
[Python] Obtenir la liste des noms ExifTags de la bibliothèque Pillow
Python + sélénium pour GW beaucoup de publicités par courrier électronique
Regrouper par éléments consécutifs d'une liste en Python
Obtenez l'état de fonctionnement de JR West avec Python
Obtenez une grande quantité de données Twitter de Starba avec python et essayez l'analyse de données Partie 1
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
J'ai isolé mon environnement avec virtualenv, mais je reçois beaucoup de paquets avec pip list
Après avoir frappé l'API Qiita avec Python pour obtenir une liste d'articles pour les débutants, nous visiterons les articles divins
Obtenez le code du pays avec python
Essayez d'obtenir la liste des fonctions du paquet Python> os
Grattage au sélénium en Python
Grattage avec Selenium + Python Partie 1