[PYTHON] Automatisation de la création du tableau des heures de travail en fin de mois avec Selenium

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.

Vue d'ensemble de l'automatisation

Contenu commercial à automatiser

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.

Procédure commerciale avant automatisation

  1. Enregistrez les heures d'ouverture quotidiennes sur votre site
  2. À la fin du mois, reportez-vous visuellement à la date et l'heure d'arrivée et de départ sur le site Web de l'entreprise.
  3. Publier sur Excel avec réception temporaire
  4. Soumettre à la personne responsable

L'affichage des heures de présence et de départ 2 et 3 ci-dessus a été automatisé.

Procédure commerciale / de traitement après automatisation

  1. Enregistrez les heures d'ouverture quotidiennes sur votre site
  2. Créez un nouvel Excel avec copie et exécutez python WorkingTimeGet.py
(1) [Acquisition des données d'origine]
① Accédez à votre site avec Selenium et entrez votre identifiant et votre PASS
② Cliquez sur le bouton de connexion pour vous connecter
③ Transition vers la page de consultation des heures de travail
④ Obtenir le HTML (fermer la page Web)
(2) [Traitement des données, création Excel]
① Récupérez chaque élément de la balise Table et insérez-le dans le DataFrame
② Ouvrez Excel et définissez l'heure d'aller au travail
③ Enregistrez Excel et quittez
1. Soumettre à la personne responsable

Technologie utilisée

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

Code source

<détails>

Code source </ summary>

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

Recommended Posts

Automatisation de la création du tableau des heures de travail en fin de mois avec Selenium
Essayez de ne faire réagir que le carbone en bout de chaîne avec SMARTS
Cours de base Python (à la fin de 15)
python> print> Est-il redirigé uniquement à la fin du processus?> Exécuter avec -u
[Automation] Extraire le tableau en PDF avec Python
Envoyer Gmail à la fin du processus [Python]
Supprimer une chaîne spécifique à la fin de python
Extraire le tableau des fichiers image avec OneDrive et Python
Coordonnées les plus à droite de l'étiquette faite avec tkinter
Comment insérer un processus spécifique au début et à la fin de l'araignée avec la tremblante
Un diagramme de réseau a été créé avec les données du COVID-19.
Obtenez UNIXTIME au début d'aujourd'hui avec une commande
Décorateur qui affiche "Nom de la méthode FIN" à la fin de la méthode
La vraie valeur de l'automatisation Terraform à partir d'Oracle Cloud
[Connexion entièrement automatique] Résolution du problème de 90 minutes / 12 heures avec uniquement le fichier Colaboratory [Utiliser Selenium]