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.
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.
Die Buchung der oben genannten 2 und 3 Anwesenheits- und Abfahrtszeiten wurde automatisiert.
python WorkingTimeGet.py
ausPython (3.8.5) selenium (3.141.0) beautifulsoup4 (4.9.3) pandas (1.1.3) openpyexl (3.0.5)
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')
Recommended Posts