[PYTHON] Puisque je suis libre, je vais créer un "outil RPA" # 3 édition sélénium Connexion automatique

introduction

Tout le monde, ça fait un mois environ. C'est enp. Je porte des lunettes. Cet article est un rapport d'étape pour quiconque essaie de créer un "outil RPA". Veuillez noter qu'il ne décrit pas comment créer des outils RPA ou RPA. (Peut-être que je vais mettre un peu de sauce dessus. Cela dépend de mon humeur) Cette fois, c'est Part.1 pour s'entendre avec le sélénium. La seule chose que j'ai faite était "l'opération de connexion", mais c'était assez profond. Ce sera encore un long article, mais je vous serais reconnaissant si vous pouviez vous entendre avec moi.

Que peut faire le sélénium?

Tout d'abord, familiarisons-nous avec le sélénium. sélénium est un outil qui actionne directement le navigateur avec le programme __. __ Au lieu d'utiliser le pointeur de la souris pour faire fonctionner le navigateur C'est comme si le sélénium envoyait des commandes au navigateur pour effectuer des opérations. Ainsi, vous pourrez effectuer d'autres travaux en exécutant votre navigateur sur le sélénium. (Je n'ai pas essayé celui avec une longue durée de fonctionnement, donc je n'ai pas vérifié comment cela fonctionne réellement.)

Connectons-nous avec le sélénium Nico Nico Video Edition

Oui. De là, le sujet principal, __selenium, automatise la connexion. __ La raison de l'automatisation de la connexion est que je pensais que ce serait facile et parfait pour pratiquer le sélénium. __ Vous pouvez vous connecter avec des actions de base telles que taper dans une zone de texte ou cliquer sur un bouton. Mais __ n'était pas si gentil. J'en parlerai plus tard. __ </ font>

Maintenant, connectons-nous immédiatement. Pour commencer, connectez-vous à Nikodo. Voici l'écran de connexion de Nikodo. ニコ動のログイン画面 Eh bien, ça ressemble à ça. Il y a aussi une connexion avec google ci-dessous, mais je ne vais pas l'utiliser cette fois donc je ne la poste pas. (J'avais peur du droit d'auteur du logo)

En tant que flux, __1. Accédez à la page de connexion. __ __2. Entrez votre adresse e-mail dans la zone de texte ci-dessus __ __3. Entrez votre mot de passe dans la zone de texte ci-dessous __ __4. Cliquez sur le bouton de connexion __ C'est vrai.

Ma méthode d'implémentation est __ "Mettez la procédure que je fais habituellement en programmation telle quelle" __. Donc __ je vais implémenter le flux ci-dessus tel quel. __

Le code est ci-dessous.

slogin_niconico.py


#Importation de pilote
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import psutil

chrome = webdriver.Chrome(r".\driver\chromedriver.exe")
 
#Aller à la page de connexion
chrome.get("https://account.nicovideo.jp/login?site=nicoaccount&next_url=%2Fmy%2Faccount%3F&time=1593735684")

#Variables requises pour la connexion
user_name = "user_name"
password = "password"

#Obtenez des zones de texte et des boutons de connexion
element_user = chrome.find_element_by_id("input__mailtel")
element_password = chrome.find_element_by_id("input__password")
element_logbtn = chrome.find_element_by_id("login__submit")

#Entrez l'adresse et le mot de passe dans la zone de texte
element_user.send_keys(user_name)
element_password.send_keys(password)

#Appuyez sur le bouton de connexion
element_logbtn.click()

#Mettre fin au processus chromedriver
p = psutil.Process(chrome.service.process.pid)
p.terminate()

Quelque chose comme ça. Tout ce que vous avez à faire est de sauter à la page de connexion, de taper dans la zone de texte et d'appuyer sur le bouton de connexion. La dernière étape consiste à résoudre le problème que le pilote continue de se déplacer même après la fin du programme en raison des spécifications. Ce que nous faisons, c'est utiliser l'ID de processus pour ignorer le processus du pilote. Si vous avez d'autres problèmes, veuillez vérifier par vous-même! Ce n'est qu'un rapport d'étape.

Connectons-nous avec Selenium Amazon Edition

Maintenant que vous êtes connecté à Nikodo, connectons-nous à Amazon. __Hmm? Qu'est-ce qui est différent de Nico Dou? __ Vous pourriez penser cela. __ Le flux est certainement presque le même que lorsque Nico se déplaçait __. Cependant, Amazon ajoute un peu de travail. amazonのログイン画面.png __ Oui! Certification en deux étapes! __ </ font> Un mot de passe à usage unique est requis. (Nikodo a également une certification en deux étapes, mais cette fois je l'ai utilisé comme non-version) Il m'a fallu un mois pour comprendre comment obtenir ce mot de passe à usage unique. Bien sûr, le sélénium n'a pas une fonctionnalité intéressante pour survivre à la vérification en deux étapes. C'était un problème ... Ainsi, l'histoire d'ici sera envoyée dans un record de lutte révolutionnaire de certification en deux étapes, un double baril luxueux.

Stratégie.1 Utilisation d'une application qui génère un mot de passe à usage unique

Cette stratégie consiste à __ obtenir un mot de passe à usage unique d'une application externe telle que Google Authenticator à l'aide du module de sous-processus. Cependant, il est difficile de gérer les applications qui s'exécutent sur .exe telles que Google Authenticator, j'ai donc essayé d'implémenter __ en utilisant une application qui s'exécute sur l'invite de commande __. J'ai trouvé les deux suivants.

  • oath-toolkit
  • authenticator

Je vais l'implémenter avec l'un ou l'autre de ces deux, mais celui que j'ai choisi est authenticator. La raison en est __ parce qu'il était facile à utiliser comme licence. La licence MIT est la meilleure. Cependant, l'authentificateur présente également un inconvénient. Autrement dit, cela ne se termine pas éternellement à moins que vous ne le terminiez par __Ctrl-C. __ Vous ne pourrez pas obtenir la sortie de __authenticator jusqu'à ce qu'elle se termine définitivement. __ C'est là que la méthode terminate du module __subprocess est utile. __ Vous pouvez forcer __authenticator à se terminer à l'aide de la méthode terminate. __ C'est la seule façon de le faire, car vous pourrez obtenir la sortie lorsque vous aurez terminé. Et le résultat obtenu par la technique combinée d'authentificateur et de module de sous-processus est le suivant.

Enter passphrase:

Pourquoi! !! Pourquoi ne puis-je pas obtenir un mot de passe à usage unique!

La raison semble être __ Je ne parviens pas à obtenir la sortie de la partie interrompue __. Il semble que seule la partie Enter passphrase puisse être obtenue car l'attente de l'entrée arrive plus tard. Cela peut être différent. Eh bien, la chose importante ici est que le module de sous-processus __ ne peut pas obtenir le mot de passe à usage unique généré par l'authentificateur __ </ font>. Pour le dire clairement, c'est __operation failure __. J'ai appris à utiliser le module de sous-processus. Environ un mois.

Strategy.2 Vous devez le générer vous-même

Cette stratégie est la propre génération de mot de passe unique de __RPA __. C'est vrai. __ C'est une idée du muscle cérébral que je vais incorporer un type comme authentificateur dans RPA parce que c'est déjà gênant. __ Si la RPA elle-même peut générer un mot de passe à usage unique, tout sera résolu. Pas besoin d'applications externes. C'est là qu'intervient la bibliothèque __pyotp. __ Cette bibliothèque est utilisée lors de l'implémentation de l'authentification en deux étapes dans Python, mais cette fois, elle est utilisée pour rompre l'authentification en deux étapes. Comment l'utiliser est la suivante.

#Importer la bibliothèque pyotp
import pyotp

#Génération de mot de passe unique
totp = pyotp.TOTP("Alphabets à saisir lors de la configuration de Google Authenticator")
totp.now()

Incroyablement facile!

Je suis surpris que vous puissiez percer le mot de passe à usage unique avec cela. Un mois d'effort supplémentaire reste sous forme de tristesse. Il a été confirmé que cela fonctionne réellement. L'opération __ a réussi! __ Je n'ai pas eu à utiliser le revers de cette application.

C'est la fin de la lutte pour briser la certification en deux étapes. Eh bien, c'était un contenu profond que je faisais. Le sous-processus que je n'ai pas utilisé en particulier. Maintenant que vous êtes arrivé jusqu'ici, il ne vous reste plus qu'à écrire un programme. Le programme que j'ai écrit est le suivant.

slogin_amazon.py


#Importation de pilote
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import psutil
import pyotp

chrome = webdriver.Chrome(r".\driver\chromedriver.exe")

#Aller à la page de connexion
chrome.get("https://www.amazon.co.jp/ap/signin?openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.co.jp%2F%3Fref_%3Dnav_signin&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.assoc_handle=jpflex&openid.mode=checkid_setup&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&")

#Variables requises pour la connexion
user_name = "user_name"
password = "password"

#Obtenez la zone de texte sur la première page
element_user = chrome.find_element_by_name("email")

#Entrez votre adresse e-mail (appuyez sur Entrée)
element_user.send_keys(user_name)
element_user.send_keys(Keys.ENTER)

#Obtenez la zone de texte sur la deuxième page
element_password = chrome.find_element_by_name("password")

#Entrez le mot de passe (appuyez sur Entrée)
element_password.send_keys(password)
element_password.send_keys(Keys.ENTER)

#Génération de mot de passe unique
element_totp = chrome.find_element_by_name("otpCode")
totp = pyotp.TOTP("Alphabets à saisir lors de la configuration de Google Authenticator")

#Entrez un mot de passe à usage unique (appuyez sur Entrée)
element_totp.send_keys(totp.now())
element_totp.send_keys(Keys.ENTER)

#Mettre fin au processus chromedriver
p = psutil.Process(chrome.service.process.pid) 
p.terminate()

Je me sens comme cela. Cette fois, au lieu de cliquer sur le bouton, je l'ai implémenté en appuyant sur Entrée. C'est tout ce que j'ai fait cette fois.

Ce que vous devez faire pour mettre en œuvre l'outil RPA

Après avoir passé par l'automatisation de la connexion, j'ai eu un peu de compréhension des spécifications du sélénium. Dans cet article, je voudrais énumérer le contenu lié à la mise en œuvre des outils RPA à cette époque. Ci-dessous, les bulletins suivent.

--_ Vous devez avoir sélectionné votre navigateur pour spécifier le pilote. __ --_ Vous devez entrer le nom de la classe et le nom de l'ID pour obtenir la zone de texte. __ --_ Vous devez être invité à sélectionner ce que vous souhaitez utiliser pour obtenir la zone de texte, etc. __ --_ __ Chaque zone de texte doit spécifier ce que vous voulez entrer. __ --_ Si vous avez besoin d'une vérification en deux étapes, vous devez suivre une procédure telle que la configuration de Google Authenticator une fois pour chaque compte. __ ――_ Il est nécessaire que le développeur envoie quelque chose comme le nom de la classe afin qu'il puisse être utilisé par des personnes qui ne peuvent pas programmer. __ --_ Lorsque vous avez fini d'utiliser le pilote, vous devez arrêter le processus. __

C'est à peu près tout pour autant que je puisse penser.

finalement

Merci de rester avec nous jusqu'à la fin. J'ai posté la source que j'ai écrite pour la première fois, comment était-ce? La seule chose que j'ai faite cette fois était "l'automatisation de la connexion", mais c'était difficile. Je pense que le prochain article sera "Entendons-nous avec le sélénium Part.2", donc merci. C'est tout pour enp.

[Une addition] Nous avons reçu l'indication de la correction de la source et l'avons adoptée. Merci, shiracamus. S'il y a un répertoire qui commence par n etc. sauf s'il s'agit d'une chaîne de caractères brute, Il y a un risque que cela ne fonctionne pas car il n'est pas reconnu comme normal . C'est peut-être la base, mais c'était une opinion très précieuse pour moi.