Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen

Ich denke, dass es aufgrund der Turbulenzen des neuen Virus viele Menschen gibt, die in der Telearbeit / Fernarbeit arbeiten. Die Telearbeit wurde in der Firma gestartet, für die ich mit der Erklärung eines Notfalls arbeite. Da es jedoch problematische Regeln gab, habe ich versucht, sie mit Selenium und Python einfach zu automatisieren.

Übrigens haben wir unmittelbar nach der Stornierung der Notfallerklärung im Basisbüro angefangen zu arbeiten und manchmal von zu Hause aus gearbeitet.

Auf eigene Gefahr

Bitte verwenden Sie ** Selbstverantwortung **, um diesen Artikel vorzustellen. Es gibt auch einen solchen Ansatz, ich hoffe, Sie können ihn mit einem Gefühl der Temperatur sehen. Ich überlasse es Ihnen, sich vorzustellen, ob ich es benutze.

Dieses Mal handelt es sich nur um das interne Originalsystem, das auf dem internen Server installiert ist. Natürlich gibt es viele Dienste, für die die Automatisierung verboten ist. Wenn Sie sie als externen Dienst verwenden, stellen Sie bitte sicher, dass sie nicht gegen die Nutzungsbedingungen verstoßen, bevor Sie Ihr eigenes Risiko eingehen.

Nachdem die Einführung beendet ist, können wir sie sofort automatisieren.

Telearbeitsumgebung und Regeln

Ich denke, es gibt verschiedene Telearbeitsregeln auf der Welt, aber dieses Mal werde ich auf der Grundlage der folgenden Umgebung und Regeln sprechen.

Umgebung

Regeln für den Beginn der Telearbeit

--Schreiben Sie die heute geplanten Arbeitszeiten im Telearbeitskanal des Firmenchats

Mit anderen Worten, Sie müssen kurz vor Arbeitsbeginn (9:00 Uhr) eine Verbindung zum VPN herstellen, jeden Tag ähnliche Inhalte per Chat und E-Mail senden und im Arbeitsverwaltungssystem des Unternehmens registrieren. Damit muss ich vor Arbeitsbeginn aufstehen, den PC starten, das VPN verbinden usw., damit ich morgens nicht mehr Zeit habe, obwohl mir die Pendelzeit ausgeht.

~~ Vor allem deshalb ist es schwierig, zu Beginn der Arbeit aufzustehen. ~~

Versuchen Sie, mit Selenium und Python zu automatisieren

Glücklicherweise kann auf alle internen Systeme über einen Browser zugegriffen werden. Versuchen Sie also, Selenium, das mit der Browserautomatisierung vertraut ist, in Python auszuführen.

Chat-Automatisierung

Der Chat, der zu schreibende Kanal und der Wortlaut sind festgelegt, so dass er auf die gleiche Weise wie ein Mensch problemlos automatisiert werden kann. Nehmen wir als Beispiel das Chat-Tool "Mattermost" vor Ort.

driver = webdriver.Chrome()
#Melden Sie sich bei Mattermost an
driver.get("http://192.168.0.100/system-dev/channels/remotework") #Telearbeitskanal
time.sleep(5)
driver.find_element_by_name("loginId").send_keys("[email protected]") #Nutzername(Mail Adresse)
driver.find_element_by_name("password").send_keys("Password") #Passwort
time.sleep(1)
driver.find_element_by_id("loginButton").click() #Drücken Sie die Login-Taste
time.sleep(5)
chatbox = driver.find_element_by_id("post_textbox") #Chat-Eingabefeld abrufen
#Inhalt von hier zu schreiben
chatbox.send_keys("Guten Morgen. Es ist ein Firmentier.")
chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
chatbox.send_keys("[Heutige Arbeitszeit]")
chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
chatbox.send_keys("Geplante Arbeitszeit: 09:00 - 18:00")
chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
chatbox.send_keys("【Mittagspause(1.0h)】")
chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
chatbox.send_keys("Geplante Pausenzeit: 12:00 - 13:00")
chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
chatbox.send_keys("[Andere]")
chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
chatbox.send_keys("Keiner")
#Bisher
chatbox.submit()
time.sleep(5)
driver.quit()

Starten Sie auf diese Weise den Browser → greifen Sie auf die URL des angegebenen Kanals zu → Anmelden → Das Schreiben von Chats wird automatisiert. time.sleep ist ein Prozess, der nur auf den Teil wartet, an dem der Prozess nach dem Laden der Seite ausgeführt zu werden scheint. Es funktioniert wahrscheinlich ohne, aber es ist eine Versicherung.

Wenn Sie den Browser mit Selenium starten, startet er im Grunde genommen in einem leeren Zustand wie einem geheimen Fenster, in dem die ID und das Kennwort nicht gespeichert werden. Sie müssen also den Anmeldevorgang eingeben, müssen dies jedoch manuell tun Es ist das gleiche wie die zu erledigende Arbeit.

Ich gebe den Inhalt des Chats mit einem Zeilenumbruch ein, aber in meiner Umgebung kann ich dies mit Umschalt + Eingabetaste tun. Ich denke, es gibt ein Tool, das eine Zeile mit Strg + Eingabetaste bricht. Ändern Sie dies entsprechend.

Testen Sie danach beim Testen, indem Sie einen Kanal für nur eine Person erstellen. Wenn Sie einen Fehler in der Stoßproduktion machen, werden Sie wahrscheinlich misstrauisch sein.

E-Mail-Automatisierung

Auf das Mailsystem kann über einen Browser zugegriffen werden, und Mail kann über den Browser empfangen und gesendet werden. Daher habe ich versucht, sie zu automatisieren. Das Mailsystem, das mit dem Browser verwendet werden kann, wird von einem anderen Unternehmen betrieben, sollte jedoch in Ordnung sein, da in den Nutzungsbedingungen nicht angegeben ist, dass die Automatisierung nutzlos ist.

Starten Sie den Browser → Greifen Sie auf die URL des Mail-Systems zu → Anmelden → Neue Mail erstellen → Geben Sie den Inhalt der Mail ein → Senden Sie sie. Dies unterscheidet sich nicht von ehrlichem Chat.

Der Code unterscheidet sich nicht wesentlich vom vorherigen, aber da die E-Mail eine Regel enthielt, nach der das Datum in den Betreff eingefügt werden soll, werde ich die Verarbeitung als Beispiel darauf schreiben.

"[Viehzuchtprojekt des Unternehmens] [Beginn der Beschäftigung]" + datetime.date.today().strftime("%Y%m%d") + "Fortschrittsbericht (Taro Firmentier)"

Das Thema musste so etwas wie "[Projektname] [Beginn der Beschäftigung] Fortschrittsbericht 2020/10/01 (Name)" sein, also bekam ich das Datum zum Zeitpunkt der Ausführung und automatisierte es.

Danach wird der Bildschirm für die E-Mail-Komposition in einem separaten Fenster angezeigt. Daher habe ich einen Prozess zum Ändern des Fokusfensters (Operationszielfenster) hinzugefügt.

driver.switch_to.window(driver.window_handles[1])

Es scheint, dass Fenster von einer Zeichenfolge verwaltet werden, die als Fensterhandles bezeichnet wird. Dieses Mal wird sie jedoch nur einmal angezeigt. Geben Sie also "driver.window_handles [1]" an und geben Sie das erste geöffnete Fenster "driver.window_handles [0]" an Es wird als Fenster angegeben, neben dem geöffnet wird.

Es scheint, dass Sie "driver.window_handles [-1]" verwenden können, um das zuletzt geöffnete Fenster anzugeben.

Das Arbeitsmanagementsystem wird mit dem gleichen Gefühl automatisiert

Es ist fast das gleiche, wenn Sie so weit gehen. Klicken Sie einfach auf die URL → Anmelden → Schreiben Sie etwas wie operieren. Während des Betriebs müssen Sie das Element nur mit "id" oder "class name" angeben, sodass Sie keine andere Wahl haben, als es mit den Entwicklertools aufzunehmen.

Planen Sie die Ausführung

Nachdem die Betriebsautomatisierung in Selen abgeschlossen ist, besteht der nächste Schritt darin, die geplante Ausführung zu implementieren.

Insbesondere müssen diese automatisierten Vorgänge "so ausgeführt werden, als ob sie bei der Arbeit wären".

In diesem Beispiel ist es 9:00 Uhr. Wenn Sie jedoch um 9:00 Uhr beginnen, haben Sie um 9:00 Uhr einen Sitzplatz?

Ich glaube, ich werde kurz vor 9:00 Uhr sitzen. Auf der anderen Seite gibt es Zeiten, in denen Sie einige Minuten Verspätung haben, z. B. eine leichte Verspätung im Zug oder ein verpasster Zug, oder? Selbst wenn Sie jeden Tag den gleichen Zug nehmen, kann die Zeit, zu der Sie zur Arbeit gehen, je nach Wetter und Temperatur um einige Minuten variieren.

Mit anderen Worten, es ist unnatürlich, wenn Chats und E-Mails nicht zu einer etwas zufälligen Zeit kurz vor 9:00 Uhr gesendet werden.

Dieses Mal implementieren wir den Prozess, um den Zeitplan zu einer zufälligen Zeit von 8:50 bis 9:00 Uhr auszuführen.

chattime = ""

def timeset():
    chattime = random.randint(50, 60)
    if chattime < 10:
        #Wenn es weniger als 10 Minuten sind, füllen Sie es mit Null
        chattime = "0" + str(chattime)
    if chattime == 60:
        #9 für 60 Minuten:Interpretiere als 00
        schedule.every().day.at("09:00").do(job)
        print("09:00")
    else:
        schedule.every().day.at("08:" + str(chattime)).do(job)
        print("08:" + str(chattime))


schedule.every().day.at("08:00").do(timeset)

while True:
    schedule.run_pending()
    time.sleep(60)

So entschied ich mich, jeden Tag um 8:00 Uhr mit einer zufälligen Funktion Kontakt zur Arbeit aufzunehmen, und als diese Zeit kam, beschloss ich, Kontakt mit der Arbeit aufzunehmen.

Es ist ziemlich rau in Bezug auf die Verarbeitung, aber nachdem alle Funktionen definiert wurden, werden beim letzten "while True" unendlich viele Schleifen ausgeführt, alle Zeitpläne ausgeführt → der Ruhezustand wird 1 Minute lang wiederholt.

Registrieren Sie zum Zeitpunkt der Ausführung einen Zeitplan für die Ausführung von "Zeitsatz" um 8:00 Uhr mit "Zeitplan.jeder (). Tag.at (" 08: 00 ") .do (Zeitsatz)" und in "Zeitsatz" Zufallszahlen von 50 bis 60 werden generiert und ein diesen Zahlen entsprechender Zeitplan wird zusätzlich registriert.

Um mit anderen als 50-60 umzugehen, wird der Anfang, wenn er 10 Minuten oder weniger beträgt, mit 0 gefüllt, und wenn 60 herauskommt, wird er als 9:00 interpretiert. Die Anforderungen wurden jedoch erfüllt, so dass es in Ordnung ist.

Ganzer Code

#!python3.8
import time
import datetime
import schedule
import random
import sys
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait


def job():
driver = webdriver.Chrome()
    #Melden Sie sich bei Mattermost an
    driver.get("http://192.168.0.100/system-dev/channels/remotework") #Telearbeitskanal
    time.sleep(5)
    driver.find_element_by_name("loginId").send_keys("[email protected]") #Nutzername(Mail Adresse)
    driver.find_element_by_name("password").send_keys("Password") #Passwort
    time.sleep(1)
    driver.find_element_by_id("loginButton").click() #Drücken Sie die Login-Taste
    time.sleep(5)
    chatbox = driver.find_element_by_id("post_textbox") #Chat-Eingabefeld abrufen
    #Inhalt von hier zu schreiben
    chatbox.send_keys("Guten Morgen. Es ist ein Firmentier.")
    chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
    chatbox.send_keys("[Heutige Arbeitszeit]")
    chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
    chatbox.send_keys("Geplante Arbeitszeit: 09:00 - 18:00")
    chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
    chatbox.send_keys("【Mittagspause(1.0h)】")
    chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
    chatbox.send_keys("Geplante Pausenzeit: 12:00 - 13:00")
    chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
    chatbox.send_keys("[Andere]")
    chatbox.send_keys(Keys.SHIFT, Keys.ENTER)
    chatbox.send_keys("Keiner")
    #Bisher
    chatbox.submit()
    time.sleep(5)
    driver.quit()

    #E-Mail senden
    driver = webdriver.Chrome()
    driver.get("https://webmail.example.com/login")
    time.sleep(5)
    #Anmelde-ID
    driver.find_element_by_name("login_id").send_keys("[email protected]")
    #Passwort
    driver.find_element_by_name("pass").send_keys("password")
    time.sleep(1)
    driver.find_element_by_xpath("//input[@value='Einloggen']").click()
    time.sleep(5)
    #Mail-Kompositionsbildschirm
    driver.find_element_by_id("smail").click()
    time.sleep(5)
    driver.switch_to.window(driver.window_handles[1])
    #Mail schreiben
    driver.find_element_by_id("to").send_keys("[email protected]")
    driver.find_element_by_id("subject").send_keys(
        "[Viehzuchtprojekt des Unternehmens] [Beginn der Beschäftigung]" + datetime.date.today().strftime("%Y%m%d") + "Fortschrittsbericht (Taro Firmentier)"
    )
    driver.find_element_by_id("content").send_keys(
        "Lieber Herr\n Vielen Dank für Ihre harte Arbeit. Es ist ein Firmentier.\n Ich möchte über den heutigen Arbeitsplan berichten.\n\n [heutige Arbeitszeit]\n Geplante Arbeitszeiten: 09:00 - 18:00\n [Mittagspause(1.0h)】\n Geplante Pausenzeit: 12:00 - 13:00\n [Andere]\n Keine\n------------------------------------------------------------\n Abteilung für Tierentwicklung des Unternehmens Co., Ltd.\n Firmentier Taro/ Taro Shachiku \n  mail: [email protected]\n------------------------------------------------------------"
    )
    #E-Mail senden
    driver.find_element_by_id("send_mail").click()
    time.sleep(10)
    driver.quit()

    #Anwesenheitssystemeingang
    driver = webdriver.Chrome()
    driver.get("http://192.168.0.200/kinmu/login")
    time.sleep(5)
    driver.find_element_by_id("userId").send_keys("114514")
    driver.find_element_by_id("password").send_keys("password")
    driver.find_element_by_class_name("login_button").click()
    time.sleep(10)
    yesterday = datetime.date.today() - datetime.timedelta(days=1)
    driver.find_element_by_id(
        "dailyList["
        + datetime.date.strftime(yesterday, "%d")
        + "].orderList[0].resultEnterTime"
    ).send_keys("0900")
    driver.find_element_by_name("update").click()

    time.sleep(10)
    alert = driver.switch_to.alert
    alert.accept()

    time.sleep(10)
    driver.quit()

    sys.exit()


chattime = ""


def timeset():
    chattime = random.randint(50, 60)
    if chattime < 10:
        chattime = "0" + str(chattime)
    if chattime == 60:
        schedule.every().day.at("09:00").do(job)
        print("09:00")
    else:
        schedule.every().day.at("08:" + str(chattime)).do(job)
        print("08:" + str(chattime))


schedule.every().day.at("08:00").do(timeset)

while True:
    schedule.run_pending()
    time.sleep(60)

Zusammenfassung

Es scheint, dass alle Routinearbeiten, die über den Browser ausgeführt werden können, auf diese Weise automatisiert werden können.

Selbst wenn Sie nach 9 Uhr aufstehen, ein Bad nehmen und dann eine Verbindung zum VPN herstellen, scheint es, dass Sie vor 9 Uhr hart arbeiten.

Wenn Sie es tun, bevor Sie am Tag zuvor die Arbeit verlassen, selbst wenn Sie am nächsten Tag etwas spät aufstehen, sieht es so aus, als würden Sie zur Arbeit gehen, also ist es sicher!

Es besteht jedoch die Möglichkeit, dass Chats vor Beginn der Arbeit übersprungen wurden. Daher ist es am wichtigsten, die Dosierung beizubehalten und moderat zu halten.

Ich hoffe, dies wird die Menge der verdammten Arbeit reduzieren, weil "es keine tiefe Bedeutung hat, aber es ist eine Regel".

Recommended Posts

Ich habe versucht, mit Selenium + Python einfach ein vollautomatisches Anwesenheitssystem zu erstellen
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, ein Programm zu erstellen, das Hexadezimalzahlen mit Python in Dezimalzahlen konvertiert
[Outlook] Ich habe versucht, mit Python automatisch eine tägliche Berichtsmail zu erstellen
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Als ich versuchte, mit Python eine virtuelle Umgebung zu erstellen, funktionierte dies nicht
Ich habe versucht, automatisch einen Bericht mit der Markov-Kette zu erstellen
[Python] Ich habe versucht, automatisch einen täglichen Bericht über YWT mit Outlook-Mail zu erstellen
Ich habe versucht, einen Pandas-Datenrahmen zu erstellen, indem ich mit Python Informationen zum Lebensmittelrückruf abgekratzt habe
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ein Memorandum beim automatischen Erwerb mit Selen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Python] Ein Memo, das ich versucht habe, mit Asyncio zu beginnen
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, Bulls and Cows mit einem Shell-Programm zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Gesichtsmarkierungen mit Python und Dlib leicht zu erkennen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit einem Foto einfach ein hochpräzises 3D-Bild zu erstellen [2]. (Versuchen Sie die Verarbeitungstiefe mit numpy)
Ich habe versucht, mit einem Remote-Server über Socket-Kommunikation mit Python zu kommunizieren.
Ich habe ein Tool zum automatischen Durchsuchen mehrerer Websites mit Selenium (Python) erstellt.
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Entwicklung] (2/3) zu erstellen.
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Ausführung] (3/3) zu erstellen.
Ich habe versucht, ein Plug-In mit HULFT IoT Edge Streaming [Setup] (1/3) zu erstellen.
Ich habe versucht, eine Mac Python-Entwicklungsumgebung mit pythonz + direnv zu erstellen
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Ich möchte einfach ein Rauschmodell erstellen
Sie können auch mit Python problemlos eine GUI erstellen
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, LLVM IR mit Python auszugeben
Schritte zum Erstellen eines Twitter-Bots mit Python
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Erstellen Sie einfach eine Python-Konsolenanwendung mit Click
Ich möchte mit Python in eine Datei schreiben
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Ich habe versucht zu erklären, wozu der Python-Generator so einfach wie möglich ist.
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Ich habe versucht, mit Raspeye + Tact Switch eine Schaltfläche für Slack zu erstellen
Ich habe versucht, eine Umgebung zu erstellen, um regelmäßig mit Selenium mit AWS Fargate zu überprüfen
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Ich möchte Timeout einfach in Python implementieren
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Warum nicht einfach mit Python eine stilvolle Tabelle erstellen?