Étapes pour télécharger en bloc les photos du service photo de l'école Egao avec la base Python

Contexte (situation et tâche)

Lorsqu'un enfant est dans une école maternelle, le personnel de l'école maternelle peut prendre une photo.

Il existe plusieurs façons de partager ces photos, dont l'une est le "egao School Photo Service". C'est un service de Studio Alice, mais je pense que c'est un très bon système qui vous permet de sélectionner et d'acheter les photos de votre enfant et de les télécharger sur le Web à une date ultérieure.

ホームページ___egao_スクールフォトサービス.jpg https://egao.photo/store/

Cependant, la plupart des parents choisissent beaucoup de photos, que ce soit ou non (ma maison compte plus d'une centaine), mais il n'y a pas d'option pour ce service Web, le téléchargement en masse. Si vous cliquez un par un, vous perdrez progressivement la trace de ce que c'est. .. .. .. C'est horrible. .. .. ..

Je suis sûr que ce sera à nouveau une situation similaire, alors faites-en votre propre mémorandum.

** Cet article a été créé sur la base du site Web egao en mars 2020 et peut ne pas être utilisable si les spécifications du site Web ega sont modifiées. ** **

(Si possible, veuillez ajouter un téléchargement par lots en cas de modification des spécifications du site Web)

Ce que j'ai essayé de faire (Action)

Pour le moment, j'ai supposé que je le téléchargerais selon le flux suivant.

  1. Accédez au site
  2. Connectez-vous
  3. Transition vers la page de téléchargement
  4. Téléchargez les images affichées (photos achetées) dans un lot

Préparez-vous à l'avance

Les préparatifs pour procéder effectivement sont les suivants.

-Installez du sélénium et une belle soupe. (Surtout côté PC, faites attention à la version du pilote Web, etc.) ・ Identifiant de connexion (adresse e-mail) / mot de passe ・ Copiez et collez l'URL de la page de liste contenant les photos que vous souhaitez télécharger.

L'article auquel il est fait référence (à la fin de cet article) est détaillé sur les paramètres prédéfinis, je vais donc l'omettre ici.

Procédure réelle (résultat)

Tout d'abord, j'ai installé les bibliothèques nécessaires.

python


from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup

Ensuite, j'ai lancé Chrome.Webdriver pour un fonctionnement automatique.

python


driver = webdriver.Chrome()
driver.implicitly_wait(3)

Après le lancement, utilisez la commande suivante pour accéder au site Web concerné et vous connecter. À propos, si vous réduisez l'écran Web qui s'affiche automatiquement, la structure de xml semble changer et il y a une possibilité qu'une erreur se produise. Veuillez noter que nous ne réfléchissons pas à la manière de traiter ce domaine.

python


url = "https://egao.photo/store/" #Page Web avec page de connexion
user = "[email protected]" #Mon E-Décrivez le courrier
password = "hogehoge" #Entrez le mot de passe que vous avez défini
driver.get(url)

elem = driver.find_element_by_id("btn-login")#Appuyez sur le bouton de connexion en haut de la page
elem.click()
elem = driver.find_element_by_id("inputEmail")#entrer l'adresse e-mail
elem.clear()
elem.send_keys(user)
elem = driver.find_element_by_id("inputPassword")#Saisie du mot de passe
elem.clear()
elem.send_keys(password)
elem = driver.find_element_by_xpath("//*[@id='login-modal']/div/div/div[2]/form/div/div[3]/div[1]/button")#Appuyez sur le bouton de connexion
elem.click()

À propos de la procédure d'elem Si la procédure est décrite avec une image, elle se présente sous la forme suivante. Lors de la dernière connexion, j'aurais aimé avoir un identifiant, mais je ne l'ai pas trouvé, alors je l'ai spécifié en utilisant Xpath.

ホームページ___egao_スクールフォトサービス.jpg

Ensuite, spécifiez la page Web que vous souhaitez télécharger en masse et utilisez le pilote Web pour déplacer la page.

python


url_target = "https://egao.photo/store/EventPhoto/Download?Model=hogehogehogehogehoge-1"
driver.get(url_target)

C'est le travail principal à faire une fois avec Selenium base, puis Beautiful Soup entre en jeu (notez que le navigateur affiché par WebDriver ne doit pas être supprimé). Beautiful Soup a chargé la page actuellement ouverte par le webdriver et l'a analysée.

python


page_source = driver.page_source
soup = BeautifulSoup(page_source, 'lxml')

PhotoId était généralement inclus en tant que nom individuel dans l'image à télécharger. Tout d'abord, extrayez la partie contenant le photoId et stockez-le dans la liste. Après cela, l'identifiant (identifiant individuel pour chaque image) a été extrait.

python


linklist = []
linklist = soup.find_all('button', attrs={'name': 'photoId'})

linklist_2 = []
for a in linklist:
    b = a.attrs['id']
    linklist_2.append(b)

C'est OK si le contenu de linklist_2 est comme suit.

['Download_XYXYXYXYXYYYY', 'Download_YYYYYYYYYYYYY', 'Download_XXXXXXXXXXXYY', 'Download_XXXXXXXXXXXXY']

Enfin, je suis retourné sur Selenium et j'ai téléchargé les images pour chaque identifiant.

python


for a in linklist_2:
    elem = driver.find_element_by_id(a)
    elem.click()

Avec la méthode jusqu'à présent, vous pouvez télécharger en une seule fois jusqu'au montant maximum affiché sur la page Web, de sorte que vous pouvez le collecter en effectuant la même transition de page pour une autre page et en exécutant à nouveau la même commande. C'était.

Impressions et ce que je veux faire à l'avenir

La prochaine fois que j'aurai besoin de télécharger beaucoup, je pense à automatiser un peu plus, y compris les parties qui sont devenues redondantes. Quoi qu'il en soit, je suis heureux que cela ait facilité la tâche lorsque j'ai besoin de télécharger à nouveau le même grand nombre d'images.

Page Web référencée

La plupart des choses nécessaires ont été écrites dans les deux suivants. Merci.

[Selenium] Connectez-vous et écrivez des données dans csv [Beautiful Soup]Téléchargez des images d'Irasutoya à la fois avec le grattage Python

Recommended Posts

Étapes pour télécharger en bloc les photos du service photo de l'école Egao avec la base Python
Comment spécifier des attributs avec Mock of Python
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
Python: comment utiliser async avec
Comment démarrer avec Python
Comment calculer la date avec python
[Python] Résumé de l'utilisation des pandas
Comment couper la partie inférieure droite de l'image avec Python OpenCV
Comment utiliser BigQuery en Python
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Comment gérer l'erreur SSL lors de la connexion à S3 avec Python boto
Comment faire un test de sac avec python
Comment afficher le japonais python avec lolipop
Comment télécharger des vidéos YouTube avec youtube-dl
[Python2.7] Résumé de l'utilisation d'unittest
Code Python pour former et tester avec Custom Vision of Cognitive Service
Comment entrer le japonais avec les malédictions Python
Résumé de l'utilisation de la liste Python
[Python2.7] Résumé de l'utilisation du sous-processus
Essayez de résoudre un problème défini de mathématiques au lycée avec Python
Comment installer python3 avec docker centos
[Question] Comment utiliser plot_surface de python
(Journal 1) Comment créer, parcourir et enregistrer des données dans la base de données SQL du service Microsoft Azure avec python
Résumé de la lecture des données numériques avec python [CSV, NetCDF, Fortran binary]
Comment utiliser OAuth et API de compte de service avec le client API Google pour python
Remarque: Comment obtenir le dernier jour du mois avec python (ajouté le premier jour du mois)
Comment obtenir une liste de fichiers dans le même répertoire avec python
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Comment télécharger avec Heroku, Flask, Python, Git (4)
Comment lire un fichier CSV avec Python 2/3
Comment enregistrer toutes les photos Instagram à la fois
Comment profiter de la programmation avec Minecraft (Ruby, Python)
[Python] Comment utiliser deux types de type ()
[REAPER] Comment jouer à Reascript avec Python
Comment faire un traitement parallèle multicœur avec python
Stratégie sur la façon de monétiser avec Python Java
Résumé de la façon d'importer des fichiers dans Python 3
[Python] Comment dessiner plusieurs graphiques avec Matplotlib
[Python] Comment lire des fichiers Excel avec des pandas
Comment recadrer une image avec Python + OpenCV
Résumé de l'utilisation de MNIST avec Python
Comment implémenter "named_scope" de RubyOnRails avec Django
Comment mesurer le temps d'exécution avec Python Partie 1
Comment obtenir des éléments de type dictionnaire de Python 2.7
Comment utiliser tkinter avec python dans pyenv
[Python] Comment gérer les caractères japonais avec openCV
[Python] Comment comparer la date / heure avec le fuseau horaire ajouté
Comment mesurer le temps d'exécution avec Python, partie 2
[Python] Résumé des fonctions eval / exec + Comment écrire une chaîne de caractères avec des sauts de ligne
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
Comment compter le nombre d'occurrences de chaque élément de la liste en Python avec poids
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
Comment connaître le numéro de port du service xinetd
Comment convertir / restaurer une chaîne avec [] en python
Le mur lors du passage du service Django de Python 2.7 à la série Python 3
Comment ajouter de l'aide à HDA (avec bonus de script Python)
Mémo connecté à HiveServer2 d'EMR avec python
Comment obtenir le nombre de chiffres en Python
J'ai essayé de résumer comment utiliser matplotlib de python