[Codage] Une sorte de remplisseur de formulaire

Astronight

Membre confirmé
12 Décembre 2010
66
1
Bonjour, alors voila, je suis un débutant en programmation, ( à vrai dire, je n'y connais presque rien) et j'aurais besoin d'aide pour créer un petit script qui me simplifierais la vie.

Trêve de bavardage, je vous explique en quoi il consiste.
Donc tout simplement, au départ, j'ai un fichier texte contenant un certain nombre de mot à raison d'un mot ou une phrase par ligne.

Je voudrais donc les insérer sur un site web, à raison de 1 mot par page, c'est à dire, j'appuie sur le script, il me copie le premier mot sur une page web ( si possible le script valide la page web et actualise) et ensuite copie le second mot, et ainsi de suite

Pour illustrer l'exemple.
J'ai un fichier texte se présentant sous cette forme:
Pomme
Patate cuite
Carotte
Legume

Sur la page web 1, le script doit donc copier "pomme", le coller sur la page web puis
il "imite" deux clics de souris sur un endroit prédéfini (c'est un endroit qui ne changera jamais, donc je pense facile à programmer pour que le script "clique" dessus)
Ensuite, quand il aura rechargé la nouvelle page, il copie colle la phrase "patate cuite" sur la page web puis réimite les clics et ainsi de suite, jusqu'à ce que la liste s'épuise!

Donc, je n'ai pas vraiment idée de la difficulté à créer un script pareil.
Y aurait-il une âme généreuse qui pourrais m'aider?

Je vous remercie pour votre aide!:zen:

Ps: Si vous connaissez juste une partie que je pourrais utiliser pour le script merci de me l'indiquer! je vous en suis reconaissant!
 
Ps: Si vous connaissez juste une partie que je pourrais utiliser pour le script merci de me l'indiquer! je vous en suis reconaissant!

Je ne connais rien à la partie site Web... mais voici la partie ouverture et lecture du fichier, puis boucle sur les lignes lues. Je t'ai mis un affichage de chaque ligne lue, çà peut être utile pour tester.

Bloc de code:
tell application "Finder"
	-- Initialisation des variables Mais (répertoire user) et PathFichier (alias du fichier à lire)
	set Mais to a reference to home
	set PathFichier to file "NomFichier.txt" of folder "SousRepertoire" of folder "Repertoire" of folder "Documents" of Mais as alias
	-- Ouverture et lecture du fichier de travail "NomFichier.txt"
	open for access PathFichier
	set ContenuFic to read PathFichier
	close access PathFichier
	set ListeLigne to every paragraph of ContenuFic
	repeat with Ligne in ListeLigne
		display dialog Ligne
		-- Utilisation de chaque ligne (à faire)
	end repeat
end tell

Bon courage pour la suite :cool:
 
Je ne connais rien à la partie site Web... mais voici la partie ouverture et lecture du fichier, puis boucle sur les lignes lues. Je t'ai mis un affichage de chaque ligne lue, çà peut être utile pour tester.

Bloc de code:
tell application "Finder"
	-- Initialisation des variables Mais (répertoire user) et PathFichier (alias du fichier à lire)
	set Mais to a reference to home
	set PathFichier to file "NomFichier.txt" of folder "SousRepertoire" of folder "Repertoire" of folder "Documents" of Mais as alias
	-- Ouverture et lecture du fichier de travail "NomFichier.txt"
	open for access PathFichier
	set ContenuFic to read PathFichier
	close access PathFichier
	set ListeLigne to every paragraph of ContenuFic
	repeat with Ligne in ListeLigne
		display dialog Ligne
		-- Utilisation de chaque ligne (à faire)
	end repeat
end tell

Bon courage pour la suite :cool:

Bonjour, merci pour votre réponse, mais je n'ai pas très bien compris comment utiliser votre code.
Et spécialement celle-ci
Bloc de code:
set Mais to a reference to home
	set PathFichier to file "NomFichier.txt" of folder "SousRepertoire" of folder "Repertoire" of folder "Documents" of Mais as alias

Excusez moi mais je suis novice en codage, je viens à peine de lire quelques pages sur le net..^^
 
C'est de l'applescript ; pour lire le fichier il faut d'abord lui donner un chemin. "Mais" est le terme qui permet d'avoir le chemin vers le répertoire du user ; ensuite, je suppose que le fichier à lire s'appelle "NomFichier.txt" et qu'il est dans le répertoire "Documents:Repertoire:SousRepertoire:" ; c'était juste pour donner la syntaxe à utiliser...:D
Il te suffit donc de mettre le vrai nom du fichier et le répertoire (et éventuellement sous-répertoire) où il se trouve...
 
  • J’aime
Réactions: Astronight
Bon en parallèle, j'ai développé une partie du code pour la partie Safari! (après avoir longuement flanné sur internet)

Bloc de code:
tell application "System Events"
	tell process "Safari"
		-- ouvrir ma page web
		open location "http://lapagequejeveux.com"
	end tell
end tell
delay 4   -- je veux modifier ce delay en "attendre que la page se charge"
tell application "System Events"
	tell process "Safari"
		-- taper mes données
		keystroke "blabla"
		keystroke tab
		keystroke "blabla"
		keystroke tab
	end tell
end tell
tell application "System Events"
	tell process "Safari"
		-- retaper mes données
		keystroke tab
		keystroke tab
		keystroke "bla "
		delay 1
		keystroke "blabla"
		-- simulate pressing the Enter key
		key code 36
		keystroke tab
		keystroke "1"
		keystroke tab
		keystroke "01"
		keystroke tab
		keystroke "blabla"
		keystroke tab
		keystroke "v" using command down
-- pour simuler le copier coller
	end tell
end tell

Ensuite, j'ai deux questions à propos de cette partie, comment simuler un clic de souris sur une interface qui je pense est javascript

ensuite, comment changer le delay 4s "en attendre que le chargement finisse"


Merci, j'attends vos réponses pour cette partie et les autres ;)

Aussi, pour la partie Textedit, j'ai pensé à utiliser une sorte de matrice ou de chaine, mais je ne sait pas comment l'appliquer, si quelqu'un a des idées.
 
Update: J'ai fini la partie internet.

Il faut maintenant que le fichier s'ouvre, que la ligne 1 se copie

qu'ensuite la ligne 2 se copie
etc..
any ideas?

Merci
 
Il faut maintenant que le fichier s'ouvre, que la ligne 1 se copie

qu'ensuite la ligne 2 se copie
etc..

C'est justement ce que j'avais posté, mais peut-être que tu n'as pas compris ma réponse ?
En fait la variable "Mais" (reference to home) contient un alias vers le répertoire utilisateur, ce qui t'évite d'utiliser le chemin complet du fichier. La variable "Mais" est donc équivalent à "Macintosh HD:Users:Mon_Nom:". Mais, si tu préfères taper tout le nom de ton fichier tu peux :
Bloc de code:
tell application "Finder"
	set PathFichier to "Macintosh HD:Users:Mon_Nom:Documents:NomFichier.txt" as alias
	-- Ouverture et lecture du fichier de travail "NomFichier.txt"
	open for access PathFichier
	set ContenuFic to read PathFichier
	-- ContenuFic contient maintenant tout le contenu du fichier...
        -- Fermeture du fichier...
	close access PathFichier
	set ListeLigne to every paragraph of ContenuFic
.......
A partir de là, ListeLigne est une sorte de tableau qui contient chaque ligne de ton fichier (le fichier est lu en une seule fois...), et il te suffit de faire une boucle (repeat with Ligne in ListeLigne). Pas besoin de connaître le nombre de lignes totales. Au premier passage, Ligne sera égal à la première ligne du fichier, au deuxième passage, à la deuxième et ainsi de suite...
Si tu préfère voir un indice dans ton code, tu peux accéder à la i ème ligne avec l'instruction
"(item i of ListeLigne)". Tu peux alors utiliser Ligne dans la partie que tu as développé par ailleurs...
Voilà, j'espère que c'est plus clair pour toi...:cool:
 
Bloc de code:
tell application "Finder"
	set PathFichier to "Macintosh HD:Users:Mon_Nom:Documents:NomFichier.txt" as alias
	-- Ouverture et lecture du fichier de travail "NomFichier.txt"
	open for access PathFichier
	set ContenuFic to read PathFichier
	-- ContenuFic contient maintenant tout le contenu du fichier...
        -- Fermeture du fichier...
	close access PathFichier
	set ListeLigne to every paragraph of ContenuFic
.......
A partir de là, ListeLigne est une sorte de tableau qui contient chaque ligne de ton fichier (le fichier est lu en une seule fois...), et il te suffit de faire une boucle (repeat with Ligne in ListeLigne). Pas besoin de connaître le nombre de lignes totales. Au premier passage, Ligne sera égal à la première ligne du fichier, au deuxième passage, à la deuxième et ainsi de suite...
Si tu préfère voir un indice dans ton code, tu peux accéder à la i ème ligne avec l'instruction
"(item i of ListeLigne)". Tu peux alors utiliser Ligne dans la partie que tu as développé par ailleurs...
Voilà, j'espère que c'est plus clair pour toi...:cool:

Merci apparement ca marche très tres bien, j'ai cependant une question, et non pas des moindres :D
Je n'arrive pas à insérer les différentes lignes dans le code safari, je ne voie pas comment creer la boucle avec le "listeligne"

Désolé d'être un peu chiant :D


Edit: C'est bon j'ai compris comment faire, seulement, j'ai une dizaine de messages bizarres avant de tomber sur mes pommes/patates Etc!!

display dialog "{\\rtf1\\ansi\\ansicpg1252\\cocoartf1038\\cocoasubrtf350"
--> {button returned:"OK"}
display dialog "{\\fonttbl\\f0\\fnil\\fcharset0 Verdana;}"
--> {button returned:"OK"}
display dialog "{\\colortbl;\\red255\\green255\\blue255;}"
--> {button returned:"OK"}
display dialog "\\paperw11900\\paperh16840\\margl1440\\margr1440\\vieww9000\\viewh8400\\viewkind0"
--> {button returned:"OK"}
display dialog "\\deftab720"
--> {button returned:"OK"}
display dialog "\\pard\\pardeftab720\\sl260\\ql\\qnatural"
--> {button returned:"OK"}

Si vous savez comment les supprimer
Voila merci ^^
 
Bonsoir,

seulement, j'ai une dizaine de messages bizarres avant de tomber sur mes pommes/patates Etc!!

display dialog "{\\rtf1\\ansi\\ansicpg1252\\cocoartf1038\\cocoasubrtf350"
--> {button returned:"OK"}

Tu as enregistré ton fichier dans le format RTF, il faut qu'il soit au format texte.

Ouvre ton fichier dans TextEdit, sélectionne le menu "Format" --> "Convertir au format texte"
Enregistre-le avec l'encodage "Unicode (utf-8)"
 
Merci Mac_jac,
Celà marche parfaitement

Bloc de code:
tell application "Finder"
	-- Initialisation des variables Mais (répertoire user) et PathFichier (alias du fichier à lire)
	set Mais to a reference to home
	set PathFichier to file "Fichier.txt" of folder "Desktop" of Mais as alias
	-- Ouverture et lecture du fichier de travail "NomFichier.txt"
	open for access PathFichier
	set ContenuFic to read PathFichier
	close access PathFichier
	set ListeLigne to every paragraph of ContenuFic
	repeat with Ligne in ListeLigne
		copy Ligne --(???????????)
	end repeat
end tell

Par contre j'ai fouillé 10 000 forums, je n'arrive pas à trouver la commande necessaire pour copier cette "ligne"
et la mixer avec une sorte de boucle.

Mon problème est double alors..
Pouvoir insérer au début (hors de la boucle) la premiere ligne de cette sorte de tableau
Ensuite après dans une boucle insérer (et donc copier) tout le reste des liens


Merci de votre aide!
 
Merci Mac_jac,

Par contre j'ai fouillé 10 000 forums, je n'arrive pas à trouver la commande necessaire pour copier cette "ligne"
et la mixer avec une sorte de boucle.

Mon problème est double alors..
Pouvoir insérer au début (hors de la boucle) la premiere ligne de cette sorte de tableau
Ensuite après dans une boucle insérer (et donc copier) tout le reste des liens
Je ne suis pas sûr de comprendre le problème.

Il suffit d'utiliser item
Par exemple, je veux récupérer un élément dans la liste et la mettre dans une variable:
set var to item 1 of ListeLigne -- récupére la première ligne
set var to item 2 of ListeLigne -- récupére la deuxième ligne

Aussi, pas besoin du open for access pour lire un fichier, c'est nécessaire seulement pour écrire dans un fichier.
Bloc de code:
tell application "Finder" to set PathFichier to (file "Fichier.txt" of desktop) as alias
set ListeLigne to paragraphs of (read PathFichier) -- lecture du fichier de travail "NomFichier.txt"
 
Merci,
Je teste tout ca et je vous tient au courant!
@CathyGYM , Mac_JAC :Votre aide m'a été vitale ;)

Update: Script fini merci!


Petite question bonus d'opimisation: au lieu de lancer delay, n'y aurait-il pas un moyen de lancer un code qui permet de vérifier si la page s'est chargée?

J'ai testé ce code ci-dessus, mais il ne marche pas entre Tell application et End Tell
et on ne peux le mettre plus d'une fois
Bloc de code:
set loadStatus to safariWebPageLoaded(10)
if loadStatus is not true then display alert "There was an error:" message loadStatus as warning

on safariWebPageLoaded(waitTime) -- waitTime is the time in seconds the script will wait to let a web page load
	set myDelay to 0.5 -- the time in seconds you wait between checks for the web page loaded status
	set loadStatus to "There was an error when checking the load status!"
	
	try
		-- calculate the endTime... the time when you will stop waiting for the page to finish loading
		set endTime to (current date) + waitTime
		
		-- repeat until either the web page is loaded or the endTime is reached
		tell application "System Events" to tell process "Safari"
			repeat
				delay myDelay
				if (name of window 1) is "Failed to open page" then
					set loadStatus to "The url for the current web page is bad!"
					exit repeat
				else if (value of static text 1 of group 1 of window 1) is "" then
					set loadStatus to true
					exit repeat
				end if
				
				if (current date) is greater than endTime then
					set loadStatus to "The web page could not load in the allotted time!"
					exit repeat
				end if
			end repeat
		end tell
	on error theError
		set loadStatus to theError
	end try
	return loadStatus
end safariWebPageLoaded
 
Bonjour,

Petite question bonus d'opimisation: au lieu de lancer delay, n'y aurait-il pas un moyen de lancer un code qui permet de vérifier si la page s'est chargée?

Je m'excuse, j'avais lu ton message avant que tu l'édites, donc je n'ai pas eu de notification sur ta modification

C'est une fonction, on le met une seule fois à la fin du script.
On appelle la fonction dans un bloc Tell application comme ceci, il faut ajouter my
Bloc de code:
set loadStatus to my safariWebPageLoaded(10)
ex:
Bloc de code:
tell application "Safari"
	open location "http://www.apple.com/fr/"
	set loadStatus to safariWebPageLoaded(10)
	if loadStatus is not true then display alert "There was an error:" message loadStatus as warning
	
	open location "http://forums.macg.co/vbulletin/"
	set loadStatus to safariWebPageLoaded(10)
	if loadStatus is not true then display alert "There was an error:" message loadStatus as warning
end tell
-- fin du script

-- la fonction safariWebPageLoaded --
on safariWebPageLoaded(waitTime) -- waitTime is the time in seconds the script will wait to let a web page load
	set myDelay to 0.5 -- the time in seconds you wait between checks for the web page loaded status
	--bla
	--bla
end safariWebPageLoaded
 
Merci Mac_Jac, que pourrais-je faire sans vous...
Ca marche à merveille!

Encore une question (celle ci concerne un autre script)
J'ai besoin de lancer un clic souris dans des endroits, afin de cliquer sur des boutons sur des pages internet..
et de

J'ai testé
Bloc de code:
Click at {x,y}
Cela ne marche pas

J'ai aussi testé avec le plugin xTool.osax (que j'ai mis dans le dossier scripting additions), cela ne marche pas non plus

Si vous avez une autre solution, je suis preneur.. (ou une qui marche)


Ps: J'ai un macbook pro 2010, avec Snow leopad 10.6 (si ca peux vous aider pour la compatibilité de logiciels tiers)
 
J'ai aussi testé avec le plugin xTool.osax (que j'ai mis dans le dossier scripting additions), cela ne marche pas non plus
xTool.osax devrait fonctionner.

Quelle version de XTool.osax avez-vous ?
As-tu essayé avec un délai ?
Est-ce que tu déplaces le curseur avant de faire un clic ?

Essaie ce script
Bloc de code:
move mouse {800, 10}
delay 1
click mouse {800, 10} times 1 delay 0.5 using primary button
Est-ce que le curseur se déplace ?
 
xTool.osax devrait fonctionner.

Est-ce que le curseur se déplace ?

Quand j'ecris ce script,
on m'envoie ce message d'erreur {800, 10} ne comprend pas le message move mouse.



J'ai la version 2.0 et (au cas ou) j'ai placé le plugin dans MacintoshHD:Bibliotheque:Scriptingadditions (là ou se trouve SIMBL.osax)


Edit: à défaut d'utiliser Xtool.osax qui ne veux marcher, je viens de trouver Keyboard maestro qui permet de simuler des clics de souris et plein d'autres choses, il propose même un code Applescript à inserer pour simuler ce clic directement depuis un script! (si ca peut aider certaines personnes)
 
Quand j'ecris ce script,
on m'envoie ce message d'erreur {800, 10} ne comprend pas le message move mouse.

J'ai fait une recherche, xTool.osax ne fonctionne pas sur 10.6+

Sinon, essai avec cet exécutable ClickMouse--> le fichier joint
fonctionne sur 10.5, je ne sais pas pour 10.6+
Place-le dans le dossier "Scriptingadditions".
La syntaxe est
Bloc de code:
do shell script "/Library/ScriptingAdditions/ClickMouse 10 10"
 
Je vous en suis extremement reconnaissant, il marche à merveille!
 
Ok, parfait.

Le code ( C++) de cet exécutable est de Pascal, voir ce message

Je l'ai compilé sur xCode

Bravo! Bon travail :)

Encore un probleme se dresse devant moi
Bloc de code:
do shell script "/Library/ScriptingAdditions/ClickMouse 10 10"

N'y a t-il pas moyen d'utiliser ce script avec des variables que je définiriais?

par exemple
Bloc de code:
set Var to 0
repeat
	set Var to (Var + 1)
	if (Var = 1) then 
		set x to 483 ---- Coordonnées du point ou cliquer
		set y to 460

	end if
	
	if (Fsvar = 2) then
		set x to 483 ---- Coordonnées
		set y to 460
        end if 
	
	
	do shell script "/Library/ScriptingAdditions/ClickMouse x y"
	
	if var = 2 then exit repeat
end repeat