[PYTHON] Taro, der anstelle von Ihnen den Anwesenheitsknopf drückt

Einführung

Dies ist meine erste Teilnahme am Adventskalender. Es tut mir leid, aber ich hoffe es hilft jemandem: Nerd:

Was ist das Anwesenheitssystem Ihres Unternehmens für das Hauptthema? Wir verwenden Web-Anwesenheit (E-Clocking). Gehen Sie zur Arbeit, starten Sie Ihren PC, starten Sie Ihren Browser, greifen Sie auf E-Clocking zu, melden Sie sich an und machen Sie sich an die Arbeit! : Läufer: Es kostet viel Zeit und Mühe. Jeden Morgen hielt ich dies für schmerzhaft und versuchte, es mithilfe von Python- und Selenium-Bibliotheken zu automatisieren. Wenn Sie sich daran erinnern, können Sie einfache browserbasierte Vorgänge automatisieren, um sie für E2E-Tests und andere kleine Tools zu verwenden.

Annahme

Es wird davon ausgegangen, dass Sie über eine Umgebung verfügen, in der Python 3 und ein Chrome-Treiber ausgeführt werden können.

Implementierung

Plötzlich Quelle

syukkin.py


#Anwesenheit schieben 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()
#Lesen der Anmeldeeinstellungsdatei
inifile.read(path+'\\kintai.ini', 'UTF-8')

#Starten Sie Chrome
options = webdriver.ChromeOptions()
options.add_argument('--headless')                  #Headless-Modus
options.add_argument('--disable-gpu')               #Argumente, die in der Vergangenheit gebraucht zu werden schienen
options.add_argument('--ignore-certificate-errors') #SSL-Fehler ignorieren
#Geben Sie die Version von chromedriver an
driver = webdriver.Chrome(options=options, executable_path='Wo soll der Chromtreiber platziert werden?\\chromedriver.exe')

#Zugang zur Teilnahme
driver.get('https://cl.i-abs.co.jp/e-clocking/login.asp')
print(driver.title)
#Holen Sie sich Rahmen und wechseln Sie
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=Wert, der in DataSource eingegeben werden soll
id=Benutzeridentifikation
pass=Passwort

Kommentar

Ich werde die Optionseinstellungen vor dem Starten des Treibers und des automatischen Betriebsteils separat erläutern.

Optionseinstellung

#Starten Sie Chrome
options = webdriver.ChromeOptions()
options.add_argument('--headless')                  #Headless-Modus
options.add_argument('--disable-gpu')               #Argumente, die in der Vergangenheit gebraucht zu werden schienen
options.add_argument('--ignore-certificate-errors') #SSL-Fehler ignorieren

Für den menschlichen Betrieb ist ein Bildschirm erforderlich, aber das Programm kann problemlos ausgeführt werden, wenn das entsprechende Tag aus HTML identifiziert werden kann. Übergeben Sie daher die Option des Headless-Modus ohne Bildschirm. Leichtere Bewegung: Muskel:

Versionsspezifikation des Chrome-Treibers

#Geben Sie die Version von chromedriver an
driver = webdriver.Chrome(options=options, executable_path='chromedriver.exe')

Ich gebe absichtlich den Speicherort von chromedriver.exe im Webdriver an. Dies liegt daran, dass das Chrome-Browser-Update die von Selenium unterstützte Version nicht mehr bietet und eines Tages das Programm plötzlich nicht mehr funktioniert. Obwohl die Wirtschaft bis gestern gut funktionierte! !! Ich geriet in Panik, als ich nicht wusste: ängstlich: Dieser Artikel ist hilfreich für diesen Fehler Fehler, die durch verschiedene Versionen von Chrome Driver und Chrome verursacht wurden

** Nachtrag 2020/01/30 ** Abgesehen von der nicht unterstützten Version der Bibliothek scheint dies auch dann der Fall zu sein, wenn die von Ihnen verwendete Version von Chrome und Chrome-Treiber unterschiedlich ist. Überprüfen Sie die Version von Chrome einmal und erhalten Sie dieselbe Version erneut. ChromeDriver

Automatische Operation

#Zugang zur Teilnahme
driver.get('https://cl.i-abs.co.jp/e-clocking/login.asp')
print(driver.title)
#Holen Sie sich Rahmen und wechseln Sie
frame=driver.find_elements_by_xpath("//frame")[1]
driver.switch_to.frame(frame)
time.sleep(1)

Greifen Sie auf die E-Clocking-URL zu. Ich habe hier sofort eine Angewohnheit. Da das Frame-Tag verwendet wird, beginnt Taro mit der Bearbeitung der Datei, für die überhaupt keine Anwesenheitsschaltfläche vorhanden ist. Also werde ich Sie anweisen, mit der zweiten Person zu arbeiten, die liest.

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

Alles, was Sie tun müssen, ist, das Eingabefeld und die Schaltfläche mit find_element_by_name zu finden und zu bedienen, basierend auf dem Namensattribut. Holen Sie sich den Eingabewert aus der Inifile und geben Sie ihn ein. Klicken Sie auf die Anmeldeschaltfläche, um sich anzumelden. Drücken Sie danach die Anwesenheitstaste und dann die Bestätigungstaste. Da der Bildschirm überhaupt nicht angezeigt wird, erfassen Sie den gestempelten Bildschirm mit save_screenshot für alle Fälle.

Eigentlich ist es besser, einen Prozess durchzuführen, um zu warten, bis der Bildschirm gelesen wird, aber den Schlaf (1) einzuschalten, um den Tee schlammig zu machen. (Wenn das Laden des Bildschirms lange dauert, kann es hier herumfallen.)

Übrigens, wenn Sie die Arbeit verlassen möchten, gehen Sie zu element_by_name ('IN') driver.find_element_by_name('OUT').click() Mach einfach.

Batching

Es ist ein Ärger, also möchte ich nur auf die Batch-Datei doppelklicken, um sie zu beenden, also mache ich das.

syukkin.bat


Der Ordner, in dem sich die CD-Py-Datei befindet
python syukkin.py

Sie können es sofort verwenden, indem Sie eine Bat-Datei auf Ihrem Desktop ablegen. Es könnte besser sein, daraus eine exe-Datei zu machen.

abschließend

Es ist sehr einfach, aber ich bin darauf gestoßen, als ich es gemacht habe (insbesondere die Chrome-Treiberversion ...), also hoffe ich, dass es hilft. Wenn Sie zusätzliche Informationen oder Verbesserungen haben, stellen Sie bitte eine Bearbeitungsanforderung: bow_tone1:

Recommended Posts

Taro, der anstelle von Ihnen den Anwesenheitsknopf drückt
Überprüfen Sie den Typ der von Ihnen verwendeten Variablen