Exemple d'automate de mise à jour de données via un fichier csv

Tutos et exemples de scripts et de code
Post Reply
francois
Posts: 456
Joined: 18 Oct 2010, 10:33
Location: France

Exemple d'automate de mise à jour de données via un fichier csv

Post by francois »

Bonjour,

En pièce jointe, un script de mise à jour de données :
  • Le script boucle sur un fichier CSV
  • Il "saisit" les données dans les champs d'un formulaire HTML
Dans ce formulaire de saisie (a.html), il y a 3 champs :
  • Nom
  • Prénom
  • Age
Et un bouton de Validation

A paramétrer dans l'action "Préparation" :

Code: Select all

nom_fichier_in= "fichier_in.csv";
rep_fichier_in= "C:/temp";

page_html=  "a.htm";

max_time_MAJ = 2000 // en milli secondes (temps que met l'appli par MAJ)

var position_nom = new Point(608,387);
var position_prenom = new Point(605,423);
var position_age = new Point(590,460);
var position_validation = new Point(517,526);

Actions qu'il faudrait également modifier pour l'adapter à un autre formulaire :
  • "debut de boucle"
  • "remise à blanc zones de saisie"
  • "Saisie dans grille"
Il n'est pas nécessaire de savoir coder, les modifications peuvent être faites par analogie avec l'existant.

En pièce jointe :
- Le script
- Le fichier csv
- La page a.htm
maj_via_grille_de_saisie.zip
(3.14 KiB) Downloaded 145 times
francois
Posts: 456
Joined: 18 Oct 2010, 10:33
Location: France

Re: Script de mise à jour de données via un fichier CSV

Post by francois »

Même principe que le script précédent.

Mais en utilisant uniquement la touche "Tab" pour se déplacer vers les zones de saisie.
Ici, il n'est pas besoin de mémoriser la position de ces zones de saisie.

L'avantage est que le script fonctionne quelque soit la résolution de l'écran.

En pièce jointe :
- Le script
- Le fichier csv
- La page a.htm
maj_via_grille_de_saisie-only with touche TAB.zip
(3.9 KiB) Downloaded 124 times
EduardoVeigaBJC
Posts: 1
Joined: 14 Feb 2022, 20:05

Re: Script de mise à jour de données via un fichier CSV

Post by EduardoVeigaBJC »

Salut l'ami! Merci beaucoup pour l'exemple, ça m'a beaucoup aidé ici! Comment pourrais-je écrire une valeur juste après la dernière ligne du CSV ? De préférence sans ouvrir le fichier visuellement. Merci beaucoup. quand j'aurai fini, je posterai sur le Forum comme exemple ! By Google tradutor!
francois
Posts: 456
Joined: 18 Oct 2010, 10:33
Location: France

Re: Script de mise à jour de données via un fichier CSV

Post by francois »

Bonjour,

Même fichier de données et grille de saisie que les scripts précédents.

Mais ici, le script enchaine sur la ligne suivante du fichier en analysant les messages
que retourne l'application après validation de la saisie .
Dès qu'un message apparait, le script enchaine sur la ligne suivante du fichier.

Donc le traitement est beaucoup plus rapide.

Les types de messages :
- Soit OK, saisie prise en compte
- Soit message d'anomalie, exemple : "Age non numérique".

Le cycle :
1) Lit une ligne du fichier
2) Remplit la grille de saisie
3) Valide
4) Cherche un message retourné par l'application.
5) Mémorise dans le fichier bilan : le message + les données de la ligne



Pour simuler une situation réelle, le fichier comporte volontairement des données aberrantes ou incomplètes :
Pour une ligne :
- Nom pas rempli
- Prénom pas rempli
- Age pas rempli
- Age non numérique
- Age > 120 ans



En plus :
  • La console affiche :
- Le % du fichier pris en compte
- Le temps estimé qu'il reste.
Ce peut être utile pour un traitement de plusieurs heures.
  • La variable 'max_time_MAJ' est utilisée si le script ne trouve pas de message de l'application.
Après ce temps, le script :
- Mémorise que l'appli n'a pas retourné de message.
- Enchaine sur la ligne suivante.

Le script s’arrête s'il rencontre 'nb_max_time_MAJ_admissibles'
(Inutile de faire tourner le script s'il rencontre trop de cas non gérés.)

3 cas sont possibles :

- L'application ne fonctionne pas.
- Des messages apparaissent bien mais ils ne sont pas prévus dans le script.
- Le message a été prévu mais l'image correspondant à ce message n'est pas reconnue.


A faire avant une première action :
1) "Apprendre" au script les différents cas possibles ( y compris le cas 'OK'):

Saisir nom, prénom et age et provoquer un message soit 'ok' soit d'anomalie.
Par cas rencontré, créer une image.
Pour les modèles, voir dans répertoire 'img'
Attention, il faut recréer les images pour les adapter à votre résolution d'écran.

En sortie, le fichier 'bilan' indique le traitement effectué pour chaque ligne du fichier.

2) Paramétrer :
Dans 1ere action :

Code: Select all

nom_fichier_in= "fichier_in.csv";
rep_fichier_in= "C:/temp/maj_dans_appli";
rep_fichier_out= "C:/temp/maj_dans_appli";
rep_img_msgS = "C:/temp/maj_dans_appli/img";
page_html=  "a.htm";
 
max_time_MAJ =3000
nb_max_time_MAJ_admissibles = 5 
Puis mémoriser la position des zones de saisie
(toujours dans 1ere action)

Code: Select all

var position_nom = new Point(553,380);
var position_prenom = new Point(548,405);
var position_age = new Point(548,428);
var position_validation = new Point(505,469);
var position_reset = new Point(613,472);


Puis adapter à votre contexte les parms de l action 'trouver image'
(toujours dans 1ere action)

Code: Select all

confidenceMinimum = 75
searchExpansion=  15 

A faire avant chaque lancement du script :
Ouvrir la page a.htm.

Si vous voulez lancer le script en pièce jointe tel quel :
Placer le répertoire 'maj_dans_appli' sous c:/temp
Dans le répertoire 'img', il faut juste recréer les images pour les adapter à votre résolution d'écran



Si vous voulez adapter ce script pour un besoin analogue.
(avec d'autres variables)
- adapter ce qui est vu plus haut.

- modifier l'action 'Début de boucle'

Code: Select all

nom =t_ligne[0];
prenom =t_ligne[1];
age =t_ligne[2];


- modifier l'action 'Saisie dans la grille'

Code: Select all

mulot.move(position_nom)
mulot.click();
clavier.writeText(nom);

mulot.move(position_prenom)
mulot.click();
clavier.writeText(prenom);

mulot.move(position_age)
mulot.click();
clavier.writeText(age);

- faire une saisie manuelle de tous les types de cas possibles
Et mémoriser les messages de l'appli dans le répertoire 'img'

Il n'y a qu'une seule action à modifier pour que ce script fonctionne sous LINUX :
action : "recuperer dans une table tous les fichiers 'jpg' sous le rep 'img' ( les msgs de l'appli)"

maj_dans_appli.zip
(15.34 KiB) Downloaded 112 times
francois
Posts: 456
Joined: 18 Oct 2010, 10:33
Location: France

Exemple d'automate de mise à jour de données via un fichier csv

Post by francois »

(en pièce jointe, une nouvelle version plus rapide du script )

Quelques conseils concernant la reconnaissance des messages qu'envoie l'application :
  • Confiance : confidenceMinimum
Cette confiance ne doit pas être trop grande : Ainsi, actiona ne restitue jamais une confiance de 100.
Ni trop petite : il ne faut pas qu'il reconnaisse à tort une image.

Empiriquement, 85 semble souvent convenir.
  • images différentes
Il faut que les 'image-copie' des différents messages envoyés par l'appli soient discriminantes entre elles
Ainsi il y a :
"Veuillez remplir un nom" et "Veuillez remplir un prénom"

Créer l'image "Veuillez remplir un prénom" n'est pas judicieux,
il y a trop de ressemblance avec l'autre message.
"remplir un prénom" est plus judicieux, voire "un prénom" s'il n'y a pas d'autre message avec "prénom".
  • Couleur de fond
Pas trop de couleur de fond lors de la création des images
Sinon le script risque de détecter à tort une image.
  • Niveau de zoom du navigateur
Le niveau de zoom du navigateur lors de l’exécution du script doit être le même que celui lors de la création des images
  • Aide à la mise au point
Avec le paramètre debug = 1, quand le script trouve une image, la confiance est affichée.

maj_dans_appli.zip
(18.3 KiB) Downloaded 110 times
francois
Posts: 456
Joined: 18 Oct 2010, 10:33
Location: France

Re: Exemple d'automate de mise à jour de données via un fichier csv

Post by francois »

(Suite à message privé)

Une piste pour aller plus vite :
Nommer les images-copie des messages renvoyés par l'application pour que les cas les plus fréquents
soient testés d'abord :

1.gif
1.gif (4.26 KiB) Viewed 2323 times
2.gif
2.gif (3.9 KiB) Viewed 2323 times
Dans le 1er cas, le traitement de 120 lignes du fichier 'csv' se fait en 3'45".
Dans le 2eme cas, le même traitement se fait en 5'40".


En effet, comme le cas 'Ok_maj' est le plus fréquent, 5 images sont testées (presque) à chaque fois pour rien
après chaque saisie pour le 2eme cas.
Post Reply