[PYTHON] Exploitez automatiquement les pages Web à l'aide du pilote Web Selenium

Aperçu

J'utilise un logiciel appelé Attendance Pro pour la saisie de présence, mais j'ai essayé de l'automatiser à l'aide du pilote Web de sélénium car la saisie quotidienne est gênante. C'est une méthode très naïve, mais je n'y suis pas très habituée, donc dans un premier temps. Faites-en également un exe pour que des personnes autres que vous et des personnes sans environnement Python puissent l'utiliser.

(8/21 postscript) Au début, j'ai utilisé le pilote Web de Chrome, mais comme le navigateur démarre à chaque fois, j'ai changé pour utiliser PhantomJS en tant que navigateur sans tête. Téléchargez PhantomJS depuis ici et spécifiez le chemin du dossier contenant phantomjs.exe dans la variable d'environnement Path.

Environnement et préparation

L'environnement logiciel principal est le suivant. OS: Windows 10 Python: 2.7.12 Selenium: 3.5.0 PyInstaller: 3.2.1 PhantomJS: 2.1.1

Je n'avais pas de sélénium, de pyinstaller, etc., donc je l'ai installé avec pip.

pip install selenium
pip install pyinstaller
pip install ctype

code

La présence et le départ sont dans des fichiers séparés (exe). Je ne vais travailler qu'ici, mais c'est presque pareil.

attendancepro_start.py


import sys
import os
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.support import ui
from selenium.webdriver.common.keys import Keys
import time
from ctypes import *

#Afin de distribuer avec exe, spécifiez le nom d'utilisateur et le mot de passe à chaque fois
username = sys.argv[1]
password = sys.argv[2]

user32 = windll.user32

def page_is_loaded(driver):
    return driver.find_element_by_tag_name("body") != None

#Chargez le pilote du navigateur.
# driver = webdriver.Chrome("./chromedriver.exe")Initialement implémenté dans Chrome, mais modifié comme suit
driver = webdriver.PhantomJS(service_log_path=os.path.devnull)
#Chargez la page cible. Tout d'abord, la page de connexion.
driver.get("https://attendance.cvi.co.jp/LogOn.aspx")
wait = ui.WebDriverWait(driver, 10)
wait.until(page_is_loaded)

#Après le chargement, trouvez_element_by_Obtenez l'élément en le spécifiant avec xpath et donnez l'entrée.
#Au préalable, affichez la source de la page Web sur le navigateur et recherchez l'ID du formulaire que vous souhaitez saisir.
email_field = driver.find_element_by_xpath("//*[@id=\"txtUserID\"]")
email_field.send_keys(username)

company_field = driver.find_element_by_xpath("//*[@id=\"txtCompanyCode\"]")
company_field.send_keys("xxx")

password_field = driver.find_element_by_xpath("//*[@id=\"txtPassword\"]")
password_field.send_keys(password)

#Après avoir tout entré, transition d'écran
password_field.send_keys(Keys.RETURN)
wait = ui.WebDriverWait(driver, 10)
wait.until(page_is_loaded)
time.sleep(5)

#De même, spécifiez l'ID du lieu que vous souhaitez saisir et indiquez l'entrée.
#Voici l'état de l'élément submit(enabled/disabled)Les cas sont divisés par.
#De plus, la MessageBox permet de savoir de quelle branche il s'agissait.
if driver.find_element_by_xpath("//*[@id=\"ctl00_ContentMain_btnWebStartTime\"]").is_enabled():
    driver.find_element_by_xpath(
        "//*[@id=\"ctl00_ContentMain_btnWebStartTime\"]").click()  # Send day start
    user32.MessageBoxA(
        0,
        "Start done",
        "AttendancePro",
        0)
else:
    user32.MessageBoxA(
        0,
        "Start already done",
        "AttendancePro",
        0)

#Lorsque vous avez terminé, navigateur et raccourcis(Voir ci-dessous)Fermez la fenêtre et sortez.
driver.close()
os.system('taskkill /fi "WindowTitle eq attendancepro_start"')
sys.exit()

conversion exe

Convertissez en exe avec la commande suivante. ico est approprié. pyinstaller --clean -F --icon=xxx.ico attendancepro_start.py

À ce stade, testez l'exe résultant ci-dessous. ʻAttendancepro_start.exe <nom d'utilisateur> ` Lorsque vous utilisez le pilote Chrome, placez-le dans le même dossier que exe.

Actions requises après la distribution

Puisqu'il est difficile d'exécuter à chaque fois à l'invite de commande, on suppose que exe est exécuté comme un raccourci. Les arguments sont spécifiés dans les propriétés du raccourci. image

Avec cette méthode, la fenêtre d'invite de commande reste à la fin, donc taskkill est utilisé pour fermer la fenêtre à la fin. Je ne pense pas que je fais ça d'habitude, mais je ne savais pas comment le faire facilement, alors je le fais ...

Sentiments divers

Cela a été beaucoup plus facile. De plus, j'ai appris que je peux exploiter des pages Web avec python, donc j'espère que cela peut être appliqué à quelque chose. Python3.x est presque correct, mais seul le premier caractère est affiché dans MessageBoxA utilisé au milieu. MessageBoxW est bien, mais à l'avenir, il sera brouillé dans 2.x. Puisqu'il est censé être utilisé dans exe de toute façon, je vais fermer les yeux cette fois.

référence

Comment spécifier des éléments d'une page Web dans Selenium

Comment spécifier des variables plus tard dans la version exe

Paramètres de la boîte de message (https://msdn.microsoft.com/en-us/library/cc410914.aspx)

Fermez la fenêtre après avoir exécuté le raccourci Windows (https://stackoverflow.com/questions/16599655/how-to-close-a-cmd-window-using-python-2-7)

[Seul le premier caractère est affiché dans MessageBox](https://stackoverflow.com/questions/38302830/python-message-box-shows-only-the-first-letter-of-my-title-and-my- message)

Recommended Posts

Exploitez automatiquement les pages Web à l'aide du pilote Web Selenium
Essayez de tweeter automatiquement en utilisant Selenium.
Web scraping avec Selenium (Python)
[Python] Introduction au scraping | Programme d'ouverture de pages Web (sélénium webdriver)
Essayez d'utiliser Selenium
Application Web utilisant Bottle (1)
Utilisez le navigateur à l'aide des liaisons Python du pilote Web Selenium