Blog de développement

Dépot de le Déclaration de TVA avec Selenium

Dernière Modification le :
2000-01-01

Alexis de Lattre présente un nouveau module Oddo de préparation et télétransmission de la déclaration de TVA. Avec 2 volets: le calcul automatique des lignes de déclaration et des totaux puis la télétransmission. Il n'y a pas d'API publiquement accessible pour télétransmettre directement la déclaration de TVA. Il propose d'utiliser TELEDEC (payant!) en mode EDI. Il expérimente aussi un robot de remplissage de la déclaration de TVA sur impots.gouv.fr en mode EFI, avec Selenium IDE. Lire →.

La question de la préparation de la déclaration n'est pas abordée ici. Elle ne concerne pas les techniques Serveur ou le dépôt à proprement parler. On visionnera avec intéret sa vidéo à compter de la minute 9:30. Lire la vidéo → (ou son archive).

C'est une ébauche permettant d'initier la télédéclaration, qu'il faut finir à la main. Lire aussi ce billet →.

Je reprends l'idée avec l'ambition d'automatiser TOUT, de l'entrée sur le site jusqu'au paiement, à l'aide de Sélénium en version Python.

Programmation assistée par ... CHAT-GPT

Ce chapitre fait maintenant partie du Tronc Commun Lire →.

Les prérequis les outils et mise à jour des outils

Ce chapitre fait maintenant partie du Tronc Commun Lire →.

Effacer et conserver des captures

A chaque étape, avant un click et après un click, je conserve une copie de la source HTML et Une capture d'écran. On peut ainsi aisément rejouer le film pour déboggage.

Mon script python efface les captures antérieures, mais la date de création du fichier, elle, persistera... Ce n'est pas trop gênant , mais bon... Il est possible que la date de création ne soit pas mise à jour pour refléter la dernière opération de création du fichier. Cela est dû à la façon dont Windows gère les métadonnées des fichiers. FSO, lui, gère cela très bien donc un nettoyage préliminaire est fait avec FSO/VBS

# Définir les chemins des dossiers et initialiser le compteur d'étape
step = 0
sDossier_captures_as_text = "E:\\...\\TVA\\Text_Captures"
sDossier_captures_as_PNG = "E:\\...\\TVA\\PNG_Captures"

def sauvegarder_capture_et_source(driver):
    global step  # Indiquer qu'on va utiliser et modifier la variable globale `step`
    step += 1  # Incrémenter l'étape
 
    step_normalise = str(step).zfill(2)
    chemin_capture_png = os.path.join(sDossier_captures_as_PNG, f"{step_normalise}_capture.png")
    chemin_capture_text = os.path.join(sDossier_captures_as_text, f"{step_normalise}_source.html")
    # Supprimer le fichier de capture s'il existe déjà
    try:
        if os.path.exists(chemin_capture_png):
            os.remove(chemin_capture_png)
    except Exception as e:
        print(f"Erreur lors de la suppression du fichier : {e}")
    time.sleep(5)
    driver.save_screenshot(chemin_capture_png)
    time.sleep(5)
    code_source_complet = driver.page_source
    with open(chemin_capture_text, 'w', encoding='utf-8') as fichier:
        fichier.write(code_source_complet)
https://automationtesting.in/taking-full-page-screenshot-in-selenium/ So, while capturing the screenshot in selenium 3 it will capture only the visible area of the web page in all the browsers including firefox

Lecture du Fichier Clef/Valeur

Le fichier Clef/Valeur est à constituer depuis le logiciel de comptabilité. A chacun sa sauce. Parmi les clés, il doit contenir: identifiant, password, email_manager, email_superviseur, email_password, SIREN, abonnement,Annee_declaration, mois_declaration, suivi des couples cases/valeurs, sur le formulaire de CA

Descriptif des cases: Les références officielles Télécharger → ... Le descriptif ici suffit sans doute: Lire →. Le click droit pour lire le code de la source suffit aussi...
Pour trouver une bonne référence taper "edi-tva code nref 100089" et ajouter l'année en cours ou la precédente pour identifier un fichier XLS chez cerfaliassefiscale.com. Le fichier a un nom comme : 3310-CA3-version-2023-01-01_V3.xls Les cases sont identifiées par leur code Lettre/chiffre ex: A1 Ventes, prestations de services.
(Ce code est documenté dans les spécifications EDI-TVA sous la dénomination code NREF).

J'utilise un format INI, simple. Attention la lecture est sensible à la case...

[DEFAULT]
identifiant = votre_identifiant
password = votre_mot_de_passe
email_manager = manager@example.com
email_superviseur = superviseur@example.com
email_password = mot_de_passe_email
SIREN = numéro_SIREN
abonnement = numéro_abonné
annee_declaration = 2024
mois_declaration = mars

[cases_valeurs]
case1 = valeur1
case2 = valeur2

Et la lecture

import configparser

config = configparser.ConfigParser()
config.read('chemin_vers_fichier.ini')

identifiant = config['DEFAULT']['identifiant']
password = config['DEFAULT']['password']
# Et ainsi de suite pour les autres clés

case1 = config['cases_valeurs']['case1']

Entrée sur la page d'acceuil


# Ouverture de la page de connexion
driver.get("https://cfspro-idp.impots.gouv.fr/")

# Remplacer 'id_utilisateur' et 'id_mot_de_passe' par les vrais sélecteurs des champs sur la page de connexion
# Ces sélecteurs peuvent être des ID, des noms, ou tout autre sélecteur CSS supporté par Selenium
# Attendre que la page se recharge après la connexion
driver.implicitly_wait(10)
sauvegarder_capture_et_source(driver)
# Saisie de l'identifiant
element_identifiant = driver.find_element("id", "ident")
element_identifiant.send_keys("xxxx@xxxx.fr")

# Saisie du mot de passe
element_mot_de_passe = driver.find_element("id", "mdp")
element_mot_de_passe.send_keys("xxxxx")
sauvegarder_capture_et_source(driver)
# Envoi du formulaire
# Remplacer 'id_bouton_connexion' par le vrai sélecteur du bouton de connexion
element_bouton_connexion = driver.find_element("id", "valider")
element_bouton_connexion.click()

XXX

					    
XXX