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.
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
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()
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>
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.
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 ...
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.
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