Hallo Hans, hallo Ed,
wie gut, dass Ihr diesen Thread nicht gelöscht habt. Ed’s Code hat mir sehr geholfen, denn ich hatte vor kurzem genau die gleiche Aufgabe. Dazu habe ich mir den Code kopiert und zum Testen die repeat-Schleife entfernt.
picPath ist bei mir eine URL, die mit http beginnt.
SavePath ist der komplette Pfad unter dem das Bild gesichert werden soll. Der Dateiname im Sichernpfad ist der Name des Originals.
---
tell application "Safari"
activate --
[olive] Hier wird das aktuelle Bild im Internet angesteuert.[/olive] tell application "System Events"
to keystroke "l"
using command down set URL of document 1
to picPath --
[olive] An dieser Stelle gab es ein Problem mit der Ladezeit des Bildes[/olive] delay 5
--
[olive] Hier wird das aktuelle Bild lokal gespeichert.[/olive] save document 1
as file in SavePath --
[olive] [/olive][olive]??[/olive]
[olive] beim Speichern wird an den Dateinamen leider noch ein ".download" angehängt, wodurch das öffnen durch Safari nicht gelingt. Falls die Datei also von Safari geöffnet werden soll, vor dem öffnen diese Endung entfernen.[/olive] end telltell application "System Events" to keystroke "s" using command down
---
nicht mehr im Skript. Sie öffnete den Sicherndialog, den ich gar nicht wollte, da der Sichernpfad ja bekannt ist. Und die save-Zeile schaffte das allein.
Nur "delay 5" ließ mich nicht ruhen (las sich so, Hans, dass Du damit auch nicht glücklich warst).
Um festzustellen, ob eine html-Seite komplett geladen ist, sichere ich den html-Text, sehe nach, ob /html oder /HTML enthalten ist (dazu ist die Scripterweiterung von Satimage erforderlich), wenn nicht, gebe ich eine Sekunde und wiederhole den Test.
In dieser Phase habe ich ganz auf UI-Scripting verzichtet, "open location" öffnet ein neues Fenster mit der URL, das Fenster schließe ich am Ende des Skripts wieder. So lässt sich die Zeit für das Laden der Seite "sekundengenau" begrenzen.
Bei reinen Bildern, wie Du, Edgar, es brauchtest, fiel mir aber absolut nichts ein, denn dabei gibt es keinen html-Text, den man kontrollieren könnte. Also musste eine andere Lösung her. Da ich früher schon mal von shell-Skripts gehört hatte, dachte ich mir, ich seh mal im Terminal nach, was es da an Möglichkeiten gibt.
Tja, sowas sollte man mal öfter machen. Nach einigem Herumsuchen stieß ich auf curl. Damit kann man Daten, zu denen man eine URL hat, auf seinen Rechner laden, egal ob es eine html-Datei oder ein Bild ist - und das ganz ohne Browser.
Da die Syntax dazu auf der Seite an einfachen Beispielen dargestellt wird, verzichte ich hier darauf:
http://curl.haxx.se/docs/manual.html Interessant ist, dass es auch möglich ist, in der gleichen Zeile mit festzulegen, unter welchem Namen das Objekt auf der Platte abgelegt werden soll. Oder es ist möglich, in der gleichen Zeile mehrere URLs anzugeben, die dann nacheinander abgearbeitet werden. Beispiel:
---
do shell script "cd ~/Documents/AS; curl -o race.jpg http://gallery.xrace.info/gallery2/d/30021-2/nuerb_020.jpg"
do shell script "cd " &
POSIX path of SavePath & "; curl -o " &
newPicName & " " &
getPicture ---
die erste Zeile ist konkret, die zweite mit Variablen; da muss an sehr auf die Anführungszeichen achten!
"cd" sagt der Shell: wechsle zu dem Ordner, den ich gleich angebe; SavePath enthält den Pfad zum Ordner, in den die Datei gesichert werden soll. "POSIX path of" übersetzt den Pfad so, dass die shell ihn versteht.
curl -o (Achtung, kleines o) und Dateiname und URL: sichert das Web-Objekt unter diesem Namen.
Mehrere Webadressen gleichzeitig gehen so:
---
do shell script "cd ~/Documents/AS; curl -O http://gallery.xrace.info/gallery2/d/30021-2/nuerb_020.jpg http://gallery.xrace.info/gallery2/d/30030-2/nuerb_025.jpg"
do shell script "cd " &
POSIX path of SavePath & "; curl -O " &
getPicture ---
Achtung, versal O! getPicture enthält mehrere URL, jeweils durch ein Leerzeichen getrennt.
Ich hoffe, dass dies als grober Einstieg reicht.
Gruß, Goar