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.
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.
--Je me suis également référé à ce qui suit [Python3] Scraping via navigateur (pages dynamiques, etc.) [Selenium]
Histoire de créer un conteneur pour se connecter au pachinko quotidien
Emprunter la partie connexion DMM
L'avertissement «UserWarning: la prise en charge de Selenium pour PhantomJS est obsolète, veuillez utiliser les versions sans tête de Chrome ou Firefox à la place» a été émis, mais il semble que PhantomJS a été développé. Cette fois, cela a fonctionné, mais j'utiliserai Chrome à l'avenir.
Je l'ai utilisé comme référence lors du passage de PhantomJS à Chrome. Surtout la partie Préparation.
Le code réel est presque inchangé
# #Obtenez un pilote Phantom JS
# browser = webdriver.PhantomJS()
# browser.implicitly_wait(5)
# ↓
#Obtenez un pilote Chrome
options = webdriver.ChromeOptions()
options.add_argument('--headless') #Option pour masquer l'écran
browser = webdriver.Chrome(options=options)
browser.implicitly_wait(5)
Recommended Posts