Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Coup de pouce AppleScript

10 réponses
Avatar
benoit.sansspam
Bonjour,

Je dois renommer un paquet de fichiers html. Le nom à donner au
fichier est le titre du html, ce qui fait que si je demande à Safari
d'enregistrer le fichier il me propose le bon nom par défaut.

tell application "Safari"
activate
save front document
tell application "System Events"
delay 5
keystroke return
end tell
close front document
end tell

Et ça ne fonctionne pas, le return n'est pas envoyé. Une fois
que j'ai ça, je fais ma boucle en repeat avec les fichiers à gérer et
tout est bon (avec un try dedans au cas où).

Quelqu'un a une idée ?


--
Benoît http://picasaweb.google.com/leraillez/

Avec des fumeurs c'est difficile de s'arrêter. Avec des branleurs,
là, par contre, c'est difficile de continuer.

10 réponses

Avatar
Patrick Stadelmann
In article
<1jmrf4f.1a51plejsc7g1N%,
(Benoit) wrote:

Bonjour,

Je dois renommer un paquet de fichiers html. Le nom à donner au
fichier est le titre du html, ce qui fait que si je demande à Safari
d'enregistrer le fichier il me propose le bon nom par défaut.

tell application "Safari"
activate
save front document
tell application "System Events"
delay 5
keystroke return
end tell
close front document
end tell

Et ça ne fonctionne pas, le return n'est pas envoyé. Une fois
que j'ai ça, je fais ma boucle en repeat avec les fichiers à gérer et
tout est bon (avec un try dedans au cas où).

Quelqu'un a une idée ?



Normal, "save front document" ne rend la main que lorsque la fenêtre est
fermée, on ne peut pas l'ouvrir avec une commande et la fermer via le
GUI scripting. Il faut donc envoyer un "Commande + S" au lieu d'appeler
la commande "save".

Ou, mieux, ne pas utiliser le GUI scripting, par exemple :

set f to (choose folder) as text
tell application "Safari"
save front document in (f & (name of front document))
end tell

Patrick
--
Patrick Stadelmann
Avatar
Patrick Stadelmann
In article
<1jmrf4f.1a51plejsc7g1N%,
(Benoit) wrote:

Bonjour,

Je dois renommer un paquet de fichiers html. Le nom à donner au
fichier est le titre du html, ce qui fait que si je demande à Safari
d'enregistrer le fichier il me propose le bon nom par défaut.

tell application "Safari"
activate
save front document
tell application "System Events"
delay 5
keystroke return
end tell
close front document
end tell

Et ça ne fonctionne pas, le return n'est pas envoyé. Une fois
que j'ai ça, je fais ma boucle en repeat avec les fichiers à gérer et
tout est bon (avec un try dedans au cas où).

Quelqu'un a une idée ?



Normal, "save front document" ne rend la main que lorsque la fenêtre est
fermée, on ne peut pas l'ouvrir avec une commande et la fermer via le
GUI scripting. Il faut donc envoyer un "Commande + S" au lieu d'appeler
la commande "save".

Ou, mieux, ne pas utiliser le GUI scripting, par exemple :

set f to (choose folder) as text
tell application "Safari"
save front document in (f & (name of front document))
end tell

Variante, qui ne crée pas une copie du fichier mais ne fait que changer
son nom :

set f to choose file
tell application "Safari"
open f
set n to name of front document
close front document
end tell
tell application "Finder"
set name of f to n & ".html"
end tell

Patrick
--
Patrick Stadelmann
Avatar
benoit.sansspam
Patrick Stadelmann wrote:

Normal, "save front document" ne rend la main que lorsque la fenêtre est
fermée, on ne peut pas l'ouvrir avec une commande et la fermer via le
GUI scripting. Il faut donc envoyer un "Commande + S" au lieu d'appeler
la commande "save".

Ou, mieux, ne pas utiliser le GUI scripting, par exemple :

set f to (choose folder) as text
tell application "Safari"
save front document in (f & (name of front document))
end tell



Merci pour l'explication, j'ai fini par trouver en recopiant des
trucs à droite et à gauche, mais :

- c'est lent
- ça a fini par bugger puisque je n'ai que les 600 et quelques
premiers documents qui ont été géré, les autres ont été
ouverts et refermés sans être enregistrés.

Variante, qui ne crée pas une copie du fichier mais ne fait que changer
son nom :

set f to choose file
tell application "Safari"
open f
set n to name of front document
close front document
end tell
tell application "Finder"
set name of f to n & ".html"
end tell



Avec ça je pense que cela ira plus vite et en plus ça tournera
en arrière plan, la première version fait qu'on ne peut pas utiliser la
machine à cause des keystrokes.

J'en étais avec ce qui suit et je vais essayer d'utiliser ton
idée qui doit être beaucoup plus rapide.

tell application "Finder"
set the source_folder to choose folder with prompt "Dossier source :"
set these_files to every file of the source_folder
repeat with i from 1 to the count of these_files
set ActiveFile to item i of these_files as alias
open ActiveFile
tell application "Safari"
-- si on va trop vite Safari n'a pas le temps de renommer
-- la fenêtre avec le <title> d'où le delay
delay 0.2
set n to name of front document
close front document
try
tell application "Finder"
set name of ActiveFile to n & ".html"
end tell

end try
end tell
end repeat
end tell

Ça fonctionne pour un millier de fichier, il ne me reste plus
qu'à tenter sur le gros dossier de 5Ok fichiers. J'ai un doute car je
parie que le Finder va me faire un time out lorsqu'il va générer la
liste de fichiers donc j'ajoute :
with timeout of (30 * 60) seconds


--
Benoît http://picasaweb.google.com/leraillez/

Avec des fumeurs c'est difficile de s'arrêter. Avec des branleurs,
là, par contre, c'est difficile de continuer.
Avatar
benoit.sansspam
JM Marino wrote:

C'est typiquement le genre d'opération qui aurait tout intérêt à être
réalisée en Perl !



Certes, mais je fais avec ce que je sais faire, on m'a dit
Python aussi ;)


--
Benoît http://picasaweb.google.com/leraillez/

Avec des fumeurs c'est difficile de s'arrêter. Avec des branleurs,
là, par contre, c'est difficile de continuer.
Avatar
pdorange
Benoit wrote:

> C'est typiquement le genre d'opération qui aurait tout intérêt à être
> réalisée en Perl !

Certes, mais je fais avec ce que je sais faire, on m'a dit
Python aussi ;)



Je confirme en Python c'est assez simple, pour peu d'avoir des notions
de python bien sur.

--
Pierre-Alain Dorange <http://microwar.sourceforge.net/>

Ce message est sous licence Creative Commons "by-nc-sa-2.0"
<http://creativecommons.org/licenses/by-nc-sa/2.0/fr/>
Avatar
Paul Gaborit
À (at) Fri, 6 Aug 2010 16:33:04 +0200,
(Pierre-Alain Dorange) écrivait (wrote):

Benoit wrote:

> C'est typiquement le genre d'opération qui aurait tout intérêt à être
> réalisée en Perl !

Certes, mais je fais avec ce que je sais faire, on m'a dit
Python aussi ;)



Je confirme en Python c'est assez simple, pour peu d'avoir des notions
de python bien sur.



Et en Ruby ? C'est parce que c'est l'été qu'il n'y a personne pour dire
qu'en Ruby ce serait tout aussi facile ?

;-)

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Avatar
pdorange
Paul Gaborit wrote:

>> Certes, mais je fais avec ce que je sais faire, on m'a dit
>> Python aussi ;)
>
> Je confirme en Python c'est assez simple, pour peu d'avoir des notions
> de python bien sur.

Et en Ruby ? C'est parce que c'est l'été qu'il n'y a personne pour dire
qu'en Ruby ce serait tout aussi facile ?



Si, si Ruby aussi (bien que perso jamais testé) mais ça doit aussi
pouvoir se faire en java, PHP, etc...

--
Pierre-Alain Dorange <http://microwar.sourceforge.net/>

Ce message est sous licence Creative Commons "by-nc-sa-2.0"
<http://creativecommons.org/licenses/by-nc-sa/2.0/fr/>
Avatar
xavier
Pierre-Alain Dorange wrote:

Si, si Ruby aussi (bien que perso jamais testé) mais ça doit aussi
pouvoir se faire en java, PHP, etc...



Fut un temps où n'existait que le C (et aussi Pascal, mébon, ou COBOL,
Fortran), bref, à cette époque, quand j'avais un truc de ce genre à
faire, je le codais en Lighspeed C, qui devint THINK C, puis fut bouffé
en abandonné par Symantec.

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
Avatar
benoit.sansspam
Xavier wrote:

Pierre-Alain Dorange wrote:

> Si, si Ruby aussi (bien que perso jamais testé) mais ça doit aussi
> pouvoir se faire en java, PHP, etc...

Fut un temps où n'existait que le C (et aussi Pascal, mébon, ou COBOL,
Fortran), bref, à cette époque, quand j'avais un truc de ce genre à
faire, je le codais en Lighspeed C, qui devint THINK C, puis fut bouffé
en abandonné par Symantec.



Ahhhhh ! Le Pascal, la fin de mon adolescence, parce qu'au début
c'était Basic de chez Basic.

--
Benoît http://picasaweb.google.com/leraillez/

Avec des fumeurs c'est difficile de s'arrêter. Avec des branleurs,
là, par contre, c'est difficile de continuer.
Avatar
gerald.coyot
Benoit wrote:

Xavier wrote:

> Pierre-Alain Dorange wrote:
>
> > Si, si Ruby aussi (bien que perso jamais testé) mais ça doit aussi
> > pouvoir se faire en java, PHP, etc...
>
> Fut un temps où n'existait que le C (et aussi Pascal, mébon, ou COBOL,
> Fortran), bref, à cette époque, quand j'avais un truc de ce genre à
> faire, je le codais en Lighspeed C, qui devint THINK C, puis fut bouffé
> en abandonné par Symantec.

Ahhhhh ! Le Pascal, la fin de mon adolescence, parce qu'au début
c'était Basic de chez Basic.



Ah le binaire sans compilateur.
Si, si, j'ai fait une fois et ça marchait.
--
Amitiés, Gérard Cojot
'Bienheureux les fêlés, ils laisseront passer ma lumière'[M.Audiard]
http://perso.orange.fr/gerard.cojot/