Il s'agit d'un mémo qui automatise une tâche simple et gênante.
Parce qu'il était nécessaire d'acquérir des données du site qui nécessite une connexion cette fois J'ai utilisé du sélénium pour la première fois, mais c'est pratique.
Chez PJ, qui participe en tant que récepteur secondaire Soumettez un résumé Excel des heures de travail à la société bénéficiaire principale à la fin du mois.
L'affichage des heures de présence et de départ 2 et 3 ci-dessus a été automatisé.
python WorkingTimeGet.py
Python (3.8.5) selenium (3.141.0) beautifulsoup4 (4.9.3) pandas (1.1.3) openpyexl (3.0.5)
<détails>
Recommended Posts
WorkingTimeGet.py
import sys
import os
import re #Expressions régulières
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import chromedriver_binary #Code pour passer le chemin
from bs4 import BeautifulSoup
import pandas as pd
import openpyxl as excel
loginpage = {URL de la page de connexion}
targetpage = {Une fois connecté, l'URL de la page de demande des heures de travail}
idtxt = {ID}
passtxt = {PASS}
print('Commencer le traitement')
print('Veuillez saisir le nom du fichier.')
file = input()
#Vérification de l'existence du fichier
if not os.path.isfile(file):
print('Le fichier n'existe pas.')
sys.exit()
# ================================================================================
#Obtenir des données de la page Web cible
# ================================================================================
#Ouvrez Chrome
option = Options()
option.add_argument('--headless')
driver = webdriver.Chrome(options=option)
driver.get(loginpage)
#Définir le temps d'attente maximal jusqu'à ce que l'élément soit trouvé
driver.implicitly_wait(5)
# ID/Entrez PASS sur l'écran
id = driver.find_element_by_id({ID de l'élément dans le champ de saisie ID})
id.send_keys(idtxt)
password = driver.find_element_by_id({ID de l'élément dans le champ de saisie PASS})
password.send_keys(passtxt)
#Cliquez sur le bouton de connexion
login_button = driver.find_element_by_name({ID d'élément du bouton de connexion})
login_button.click()
print('Les données sont en cours d'acquisition ……')
time.sleep(1)
#Ouvrez l'écran de demande des heures de travail
driver.get(targetpage)
#Obtenez du HTML
html = driver.page_source
driver.quit() #Fermer le navigateur
print('Acquisition des données terminée')
# ================================================================================
#Traitement de l'information
# ================================================================================
print('Traitement de l'information ...')
#Analyser le HTML
soup = BeautifulSoup(html, 'lxml')
#Créer un DataFrame
columns = ["Date", "Classification", "Présence", "Quitter le travail", "Pause", "total", "heures supplémentaires", "Déduction", "projet", "tâche", "Type de travail", "temps"]
df = pd.DataFrame(columns = columns)
#Obtenir la table
table = soup.findAll("table", {"name":{Nom du sélecteur}})[0]
trs = table.findAll("tr")
#Ajouter une ligne à DataFrame
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('Traitement des données terminé')
# ================================================================================
#Écrire dans Excel
# ================================================================================
print('Commencez à écrire dans Excel ……')
#Ouvrez Excel
wb = excel.load_workbook(file, keep_vba=True)
ws = wb[{Nom de la feuille}]
row = 1
for workfrom, workto in zip(df['Présence'], df['Quitter le travail']):
#Définir le temps de présence
ws.cell(row=row, column=2).value = workfrom
ws.cell(row=row, column=3).value = workto
#Omis ... (Autre traitement)
row += 1
wb.save(file)
print('Écriture Excel terminée')
print('Sortie de traitement')
référence