Automatisation de formulaires

Automatisation des soumissions de formulaires avec Python

Ne remplissez plus jamais un formulaire de soumission

Fini de remplir des formulaires

Remplir des formulaires en ligne est ennuyeux. Cependant, tant de personnes qui travaillent au bureau doivent parfois encore passer beaucoup de temps à remplir des formulaires en ligne pour le travail. Alors, pourquoi ne pas utiliser Python pour automatiser ce processus et gagner un temps précieux ?

Dans cet article, je vais vous montrer comment utiliser Python pour automatiser le processus de remplissage des formulaires de soumission.

Si vous préférez la vidéo, regardez ma vidéo Youtube ici :

Les marches

Pour cet exemple, je vais créer une simple enquête Google Forms, que j’inspecterai ensuite pour rassembler les éléments Web nécessaires pour effectuer mon automatisation.

Les étapes globales seront :

  1. Configurez vos réponses sous forme de fichier .csv
  2. Inspectez les éléments Web nécessaires par type d’entrée
  3. Configurer l’url et le navigateur
  4. Accéder à l’adresse Web
  5. Envoyer les clés pour les entrées textuelles
  6. Envoyer des clics pour les entrées de type case à cocher
  7. Accédez et cliquez sur le bouton Soumettre pour terminer
  8. Boucler sur la base de données et soumettre les réponses pour chaque utilisateur

1. Configurez vos réponses sous forme de fichier .csv

Pour des raisons de simplicité, le formulaire que j’ai créé sur google form est composé de trois questions simples :

  1. Quel est ton nom?
  2. Quel âge avez-vous?
  3. Quelle est votre couleur préférée?

Je sais que je sais…très original, mais c’est juste à des fins de démonstration donc nue avec moi. Le formulaire réel ressemble à ceci :

image.png
image de l’auteur

Maintenant, configurons un fichier .csv pour stocker nos réponses. Je vais simuler une base de données simple de noms, d’âges et de choix de couleurs en utilisant la fakerbibliothèque, la numpy.rando.randint()méthode et les pandas pour la trame de données finale.

à partir de sélénium importer webdriver 
importer pandas en tant que pd 
importer l'heure 
importer json 
depuis datetime importer datetime 
importer pathlib 
importer glob 
importer sys 
sys.path.append(".") 
importer faker 
importer numpy en tant que np 
importer pandas en tant que pd 

f = faker.Faker() 
couleurs = ["Bleu","Rose","Noir","Blanc","Vert"] 

noms = [f.name() for _ in range(100)] 
ages = [np.random.randint(18,65 ) for _ in range(100)] 
color_choices = [np.random.choice(colors,1)[0] for _ in range(100)] 

database = pd.DataFrame(dict(names=names, ages=ages, colors = color_choices)) 
database.to_csv("submission_form_database.csv",index=Faux) 
base de données.head()
png
image de l’auteur

Parfait! Maintenant que nous avons notre base de données, configurons l’automatisation du navigateur.

2. Inspectez les éléments Web nécessaires par type d’entrée

Maintenant, je vais simplement sur le lien de prévisualisation de mes formulaires Google, ou sur l’adresse Web réelle de l’enquête pour des scénarios de cas réels, et je collecte les noms des classes pour les différentes questions en termes de type d’entrée.

Pour ce cas, j’ai trois questions où 2 sont basées sur du texte et une est à sélection multiple, donc j’inspecte chaque élément des questions en appuyant sur CTRL+Shift+Isi vous êtes en chrome, puis en allant à : copy -> copy elementoù je copie les éléments pour chaque question qui devrait ressemble à ca:

  • Éléments Web pour les questions 1 et 2 :<input type="text" class="quantumWizTextinputPaperinputInput exportInput" jsname="YPqjbf" autocomplete="off" tabindex="0" aria-labelledby="i1" aria-describedby="i2 i3" required="" dir="auto" data-initial-dir="auto" data-initial-value="">
  • Élément Web pour la question 3 (sélection multiple)<div class="appsMaterialWizToggleRadiogroupOffRadio exportOuterCircle"><div class="appsMaterialWizToggleRadiogroupOnRadio exportInnerCircle"></div></div>

Maintenant, je copie simplement les noms de classe pour chaque type et le définit sur deux variables différentes avec le xpathbouton d’envoi :

text_question_element_class = "quantumWizTextinputPaperinputInput" 
checkbox_question_element_class = "appsMaterialWizToggleRadiogroupOffRadio" 
submit_element_class = '//*[@id="mG61Hd"]/div[2]/div/div[3]/div[1]/div/div/span/span'

Parfait, maintenant nous sommes prêts pour la partie automatisation !

3. Configurez l’url et le navigateur

url = "https://forms.gle/WY7E9N8wkiMtziTD9" 
pilote = webdriver.Chrome(executable_path="./chromedriver")

Ici, nous avons juste défini les variables pour l’url du formulaire de soumission, et le navigateur, qui dans mon cas est Google Chrome. Pour l’utiliser, vous devrez télécharger le chromedriver que vous pouvez trouver ici .

4. Accédez à l’adresse Web

pilote.get(url)

5. Envoyer des clés pour les entrées textuelles

Maintenant, nous écrivons une fonction qui s’occupe de répondre aux questions textuelles en utilisant la classe d’éléments fournie. Cette fonction prendra la trame de données en entrée avec le nom de la classe, l’ID utilisateur et le pilote contrôlant le navigateur et soumettra la réponse appropriée.

def answerNameAge(driver, df, element_class, user_id): 
    name = df["names"][user_id] 
    age = df["ages"][user_id] 
    text_answers = [name, str(age)] # suivant l'ordre dans le form 
    text_questions = driver.find_elements_by_class_name(element_class) 
    for a,q in zip(text_answers,text_questions): 
        q.send_keys(a) 
    
    renvoie le pilote

6. Envoyer des clics pour les entrées de case à cocher

Maintenant, nous configurons la fonction pour remplir les questions de la case à cocher, pour celle-ci nous aurons besoin d’un dictionnaire qui fait correspondre les couleurs avec leur ordre correspondant dans le formulaire.

color_index_dict = {"Bleu": 0, "Rose": 1, "Noir": 2, "Blanc": 3, "Vert": 4} 

def answerCheckBox(driver, df, element_class, user_id): 
    color_answer = df[" couleurs"][user_id] 
    color_answer_index = color_index_dict[color_answer] 
    driver.find_elements_by_class_name(element_class)[color_answer_index].click() 
    
    
    renvoie le pilote

Super, il ne nous reste plus qu’à envoyer le formulaire !

7. Accédez et cliquez sur le bouton Soumettre pour terminer

Ici, nous écrivons simplement une fonction simple qui accède au xpathbouton de soumission obtenu auparavant et clique dessus.

def submit(driver, element_class): 
    driver.find_element_by_xpath(element_class).click() 
    return driver

Fait! Maintenant, nous parcourons la base de données et soumettons les réponses pour chaque utilisateur.

8. Boucler sur la base de données et soumettre les réponses pour chaque utilisateur

Créons simplement une boucle simple sur notre dataframe contenant les données et soumettons les réponses une par une.

df = pd.read_csv("./submission_form_database.csv") 
text_question_element_class = "quantumWizTextinputPaperinputInput" 
checkbox_question_element_class = "appsMaterialWizToggleRadiogroupOffRadio" 

url = "https://forms.gle/WY7E9N8wkiMtziTD9" 
pilote = webdriver.Chrome(executable_path="./chromedriver" ) 
for user_id in range(len(df)): 
    driver.get(url) 
    
    driver.maximize_window() 
    driver = answerNameAge(driver, df, text_question_element_class, user_id) 
    driver = answerCheckBox(driver, df, checkbox_question_element_class, user_id) 
    driver = submit (pilote, submit_element_class)

Voilà, nous avons automatisé le processus ennuyeux de soumettre plusieurs formulaires ! Dans ma page de statistiques de réponse google forms, je vois ceci maintenant :

image de l’auteur

Cela peut être utile pour les personnes qui se retrouvent souvent à remplir des formulaires en ligne avec une structure similaire, ainsi que pour les personnes qui travaillent au bureau et doivent effectuer ce type de soumissions pour des clients ou des personnes de leur organisation.

Pourquoi automatiser ?

Quelle que soit la tâche répétable que nous effectuons en ligne, elle doit être automatisée afin que nous puissions nous concentrer uniquement sur ce qui compte. Une chose utile à faire lorsque vous essayez de détecter des tâches automatisables est de vous demander : est-ce que je le fais périodiquement ? Cela implique-t-il des processus reproductibles avec peu ou pas de prise de décision intelligente ? Si la réponse aux deux questions est oui, vous devez automatiser cette tâche.

Dans cet article, vous avez appris :

  • Comment automatiser le processus de remplissage des formulaires de soumission comme les formulaires Google à l’aide du seleniumframework Python
  • L’automatisation des formulaires de soumission implique : la configuration d’une base de données avec les données des formulaires, l’inspection des éléments Web à partir de l’adresse Web souhaitée pour savoir comment naviguer dans le formulaire en ligne, l’écriture d’une fonction pour répondre aux questions en fonction du type d’entrée, l’écriture d’une fonction simple pour cliquez sur les boutons pertinents comme le bouton soumettre
Retour en haut