[PYTHON] Automatisierung der Erstellung von Arbeitszeittabellen am Monatsende mit Selen

Dies ist ein Memo, das eine mühsame einfache Aufgabe automatisiert.

Weil es notwendig war, Daten von der Site zu erfassen, für die diesmal eine Anmeldung erforderlich ist Ich habe zum ersten Mal Selen verwendet, aber es ist praktisch.

Überblick über die Automatisierung

Zu automatisierende Geschäftsinhalte

Bei PJ, der als Sekundärempfänger teilnimmt Senden Sie am Ende des Monats eine Excel-Zusammenfassung der Arbeitszeiten an das primäre Empfängerunternehmen.

Geschäftsablauf vor der Automatisierung

  1. Erfassen Sie die täglichen Geschäftszeiten auf Ihrer Website
  2. Beziehen Sie sich am Monatsende visuell auf das Datum und die Uhrzeit der Teilnahme und Abreise von der Website des Unternehmens.
  3. Mit vorübergehendem Empfang in Excel posten
  4. Senden Sie an die verantwortliche Person

Die Buchung der oben genannten 2 und 3 Anwesenheits- und Abfahrtszeiten wurde automatisiert.

Geschäfts- / Verarbeitungsverfahren nach der Automatisierung

  1. Erfassen Sie die täglichen Geschäftszeiten auf Ihrer Website
  2. Erstellen Sie ein neues Excel mit copy und führen Sie python WorkingTimeGet.py aus
(1) [Originaldatenerfassung]
① Greifen Sie mit Selen auf Ihre Site zu und geben Sie Ihre ID und Ihren PASS ein
② Klicken Sie auf die Anmeldeschaltfläche, um sich anzumelden
③ Übergang zur Arbeitszeitabfrageseite
④ HTML abrufen (Webseite schließen)
(2) [Datenverarbeitung, Excel-Erstellung]
① Holen Sie sich jedes Element aus dem Table-Tag und fügen Sie es in den DataFrame ein
② Öffnen Sie Excel und stellen Sie die Zeit für die Arbeit ein
③ Speichern Sie Excel und beenden Sie
1. Senden Sie an die verantwortliche Person

Technologie verwendet

Python (3.8.5) selenium (3.141.0) beautifulsoup4 (4.9.3) pandas (1.1.3) openpyexl (3.0.5)

Quellcode

Quellcode

WorkingTimeGet.py


import sys
import os
import re #Reguläre Ausdrücke
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import chromedriver_binary #Code zum Übergeben des Pfades
from bs4 import BeautifulSoup
import pandas as pd
import openpyxl as excel

loginpage = {URL der Anmeldeseite}
targetpage = {Nach dem Anmelden die URL der Arbeitszeitanfrageseite}
idtxt = {ID}
passtxt = {PASS}
print('Starten Sie die Verarbeitung')

print('Bitte geben Sie den Dateinamen ein.')
file = input()

#Überprüfung der Dateiexistenz
if not os.path.isfile(file):
    print('Die Datei existiert nicht.')
    sys.exit()

# ================================================================================
#Daten von der Zielwebseite abrufen
# ================================================================================
#Öffnen Sie Chrome
option = Options()
option.add_argument('--headless')
driver = webdriver.Chrome(options=option)
driver.get(loginpage)

#Stellen Sie die maximale Wartezeit ein, bis das Element gefunden wird
driver.implicitly_wait(5)

# ID/Geben Sie PASS auf dem Bildschirm ein
id = driver.find_element_by_id({ID des Elements im Eingabefeld ID})
id.send_keys(idtxt)

password = driver.find_element_by_id({ID des Elements im Eingabefeld PASS})
password.send_keys(passtxt)

#Klicken Sie auf die Schaltfläche Anmelden
login_button = driver.find_element_by_name({Element-ID der Anmeldeschaltfläche})
login_button.click()

print('Daten werden erfasst ……')

time.sleep(1)

#Öffnen Sie den Bildschirm zur Arbeitszeitabfrage
driver.get(targetpage)

#Holen Sie sich HTML
html = driver.page_source
driver.quit() #Browser schließen

print('Datenerfassung abgeschlossen')

# ================================================================================
#Datenverarbeitung
# ================================================================================
print('Datenverarbeitung ...')
#HTML analysieren
soup = BeautifulSoup(html, 'lxml')

#Erstellen Sie einen DataFrame
columns = ["Datum", "Einstufung", "Teilnahme", "Die Arbeit verlassen", "brechen", "gesamt", "im Laufe der Zeit", "Abzug", "Projekt", "Aufgabe", "Arbeitstyp", "Zeit"]
df = pd.DataFrame(columns = columns)

#Holen Sie sich Tisch
table = soup.findAll("table", {"name":{Name des Selektors}})[0]
trs = table.findAll("tr")

#Zeile zu DataFrame hinzufügen
for tr in trs:
    tds = tr.findAll("td")
    rowname = tds[0].get_text().strip()
    df2 = pd.DataFrame(data = [[
        tds[0].get_text().strip()
        ,tds[1].get_text().strip()
        ,tds[2].get_text().strip()
        ,tds[3].get_text().strip()
        ,tds[4].get_text().strip()
        ,tds[5].get_text().strip()
        ,tds[6].get_text().strip()
        ,tds[7].get_text().strip()
        ,tds[8].get_text().strip()
        ,tds[9].get_text().strip()
        ,tds[10].get_text().strip()
        ,tds[11].get_text().strip()
    ]], columns = columns)
    df = df.append(df2, ignore_index = True)

print('Datenverarbeitung abgeschlossen')

# ================================================================================
#Schreiben Sie in Excel
# ================================================================================
print('Beginnen Sie mit dem Schreiben in Excel ……')
#Öffnen Sie Excel
wb = excel.load_workbook(file, keep_vba=True)
ws = wb[{Blattname}]

row = 1

for workfrom, workto in zip(df['Teilnahme'], df['Die Arbeit verlassen']):
    #Anwesenheitszeit einstellen
    ws.cell(row=row, column=2).value = workfrom
    ws.cell(row=row, column=3).value = workto

    #Ausgelassen ... (Andere Verarbeitung)

    row += 1

wb.save(file)
print('Excel-Schreiben abgeschlossen')

print('Verarbeitung beenden')

Referenz

Recommended Posts

Automatisierung der Erstellung von Arbeitszeittabellen am Monatsende mit Selen
Versuchen Sie, nur den Kohlenstoff am Ende der Kette mit SMARTS zu reagieren
Python-Grundkurs (Ende 15)
python> print> Wird es erst am Ende des Prozesses umgeleitet?> Mit -u ausführen
[Automatisierung] Extrahieren Sie die Tabelle als PDF mit Python
Senden Sie Google Mail am Ende des Vorgangs [Python]
Entfernen Sie eine bestimmte Zeichenfolge am Ende von Python
Extrahieren Sie die Tabelle der Bilddateien mit OneDrive & Python
Ganz rechts Koordinaten des Etiketts mit tkinter erstellt
Wie man einen bestimmten Prozess am Anfang und Ende der Spinne mit Scrapy einfügt
Mit den Daten von COVID-19 wurde ein Netzwerkdiagramm erstellt.
Holen Sie sich UNIXTIME zu Beginn des heutigen Tages mit einem Befehl
Dekorateur, der am Ende der Methode "FIN-Methodenname" anzeigt
Der wahre Wert der Terraform-Automatisierung ab Oracle Cloud
[Vollautomatische Verbindung] 90 Minuten / 12 Stunden Problem mit nur Labordatei gelöst [Selen verwenden]