[PYTHON] Taro qui appuie sur le bouton de présence à votre place

introduction

C'est ma première participation au calendrier de l'Avent. Je suis désolé, mais j'espère que cela aidera quelqu'un: nerd:

Quant au sujet principal, quel est le système de présence de votre entreprise? Nous utilisons la fréquentation Web (e-clocking). Allez au travail, démarrez votre PC, lancez votre navigateur, accédez à l'e-clocking, connectez-vous et allez travailler! : coureur: Cela demande beaucoup de temps et d'efforts. Chaque matin, j'ai pensé que c'était une douleur et j'ai essayé de l'automatiser à l'aide des bibliothèques Python et Selenium. Si vous vous en souvenez, vous pouvez automatiser des opérations simples basées sur un navigateur, afin de pouvoir l'utiliser pour les tests E2E et d'autres petits outils.

supposition

On suppose que vous disposez d'un environnement pouvant exécuter Python 3 et un pilote Chrome.

la mise en oeuvre

Soudainement source

syukkin.py


#Présence pousser Taro
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import configparser
import os
import datetime

inifile = configparser.ConfigParser()
path = os.getcwd()
#Lire le fichier des paramètres de connexion
inifile.read(path+'\\kintai.ini', 'UTF-8')

#Démarrez Chrome
options = webdriver.ChromeOptions()
options.add_argument('--headless')                  #Mode sans tête
options.add_argument('--disable-gpu')               #Des arguments qui semblaient nécessaires dans le passé
options.add_argument('--ignore-certificate-errors') #Ignorer l'erreur SSL
#Spécifiez la version de chromedriver
driver = webdriver.Chrome(options=options, executable_path='Où mettre le pilote chrome\\chromedriver.exe')

#Accès à la fréquentation
driver.get('https://cl.i-abs.co.jp/e-clocking/login.asp')
print(driver.title)
#Obtenez un cadre et changez
frame=driver.find_elements_by_xpath("//frame")[1]
driver.switch_to.frame(frame)
time.sleep(1)

driver.find_element_by_name('DataSource').send_keys(inifile.get('user_info', 'company'))
driver.find_element_by_name('LoginID').send_keys(inifile.get('user_info', 'id'))
driver.find_element_by_name('PassWord').send_keys(inifile.get('user_info', 'pass'))
driver.find_element_by_name('btnLogin').click()

time.sleep(1)
driver.find_element_by_name('IN').click()
driver.find_element_by_name('punch').click()
time.sleep(1)
driver.save_screenshot(str(datetime.datetime.now().strftime("%Y-%m-%d_%H%M%S")) + '.png')
driver.find_element_by_name('OK').click()
driver.quit()

kintai.ini


[user_info]
company=Valeur à saisir dans DataSource
id=Identifiant d'utilisateur
pass=mot de passe

Commentaire

Les réglages des options avant de démarrer le pilote et la partie fonctionnement automatique seront expliqués séparément.

Réglage des options

#Démarrez Chrome
options = webdriver.ChromeOptions()
options.add_argument('--headless')                  #Mode sans tête
options.add_argument('--disable-gpu')               #Des arguments qui semblaient nécessaires dans le passé
options.add_argument('--ignore-certificate-errors') #Ignorer l'erreur SSL

Un écran est nécessaire pour le fonctionnement humain, mais le programme peut fonctionner sans problème si la balise correspondante peut être identifiée à partir de HTML, alors passez l'option du mode sans tête sans écran. Mouvement plus léger: muscle:

Spécification de la version du pilote Chrome

#Spécifiez la version de chromedriver
driver = webdriver.Chrome(options=options, executable_path='chromedriver.exe')

Je spécifie volontairement l'emplacement de chromedriver.exe dans le pilote Web. En effet, la mise à jour du navigateur Chrome sort de la version prise en charge par Selenium et qu'un jour, le programme cesse soudainement de fonctionner. Même si l'économie fonctionnait bien jusqu'à hier! !! J'ai paniqué quand je ne savais pas: peureux: Cet article sera utile pour cette erreur Erreurs causées par différentes versions de Chrome Driver et Chrome

** Addendum 30/01/2020 ** Autre que la version non prise en charge de la bibliothèque, cela semble se produire même si la version du pilote Chrome et Chrome que vous utilisez sont différentes. Vérifiez une fois la version de Chrome et obtenez à nouveau la même version. ChromeDriver

Opération automatique

#Accès à la fréquentation
driver.get('https://cl.i-abs.co.jp/e-clocking/login.asp')
print(driver.title)
#Obtenez un cadre et changez
frame=driver.find_elements_by_xpath("//frame")[1]
driver.switch_to.frame(frame)
time.sleep(1)

Accédez à l'URL de l'horloge électronique. J'ai une habitude ici immédiatement. Depuis que la balise Frame est utilisée, Taro commence à opérer sur le fichier qui n'a aucun bouton de présence. Je vais donc vous demander de travailler avec la deuxième personne qui lit.

driver.find_element_by_name('DataSource').send_keys(inifile.get('user_info', 'company'))
driver.find_element_by_name('LoginID').send_keys(inifile.get('user_info', 'id'))
driver.find_element_by_name('PassWord').send_keys(inifile.get('user_info', 'pass'))
driver.find_element_by_name('btnLogin').click()

time.sleep(1)
driver.find_element_by_name('IN').click()
driver.find_element_by_name('punch').click()
time.sleep(1)
driver.save_screenshot(str(datetime.datetime.now().strftime("%Y-%m-%d_%H%M%S")) + '.png')
driver.find_element_by_name('OK').click()
driver.quit()

Tout ce que vous avez à faire est de trouver et d'utiliser la zone de saisie et le bouton avec find_element_by_name, en vous appuyant sur l'attribut name. Obtenez la valeur d'entrée du fichier inif et entrez-la. Cliquez sur le bouton de connexion pour vous connecter. Après cela, appuyez sur le bouton de présence, puis sur le bouton de confirmation. Puisque l'écran ne s'affiche pas du tout, prenez une capture de l'écran tamponné avec save_screenshot au cas où.

En fait, il vaut mieux mettre en place un processus pour attendre que l'écran soit lu, mais mettre en veille (1) pour rendre le thé boueux. (S'il faut beaucoup de temps pour charger l'écran, il peut tomber ici)

Au fait, si vous voulez quitter le travail, allez à element_by_name ('IN') driver.find_element_by_name('OUT').click() Fais juste.

Traitement par lots

C'est un problème, donc je veux juste double-cliquer sur le fichier de commandes pour le terminer, alors je vais le faire.

syukkin.bat


Le dossier où se trouve le fichier cd py
python syukkin.py

Vous pouvez l'utiliser immédiatement en mettant un fichier chauve-souris sur votre bureau. Il serait peut-être préférable d'en faire un fichier exe.

en conclusion

C'est très simple, mais je suis tombé dessus quand je l'ai fait (en particulier la version du pilote Chrome ...), alors j'espère que cela aide. Si vous avez des informations supplémentaires ou des améliorations, veuillez faire une demande de modification: bow_tone1:

Recommended Posts

Taro qui appuie sur le bouton de présence à votre place
Vérifiez le type de variable que vous utilisez