[GastForen Programmierung/Entwicklung AppleScript Safari: Warteschleife...

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Safari: Warteschleife...

Anonym
Beiträge gesamt: 22827

5. Sep 2005, 08:50
Beitrag # 1 von 8
Bewertung:
(2321 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen, hallo Hans,

ich habe für Safari ein Script geschrieben, das mir automatisch Bilder aus dem Internet runterladen soll. Das Problem ist nur, dass das Script nicht wartet, bis das Bild geladen ist und dann speichert, sondern direkt nachdem die neue URL zugewiesen wird speichert. Es werden zwar alle Dateien lokal angelegt, aber mit dem selben Inhalt (mit dem des 1. vollständig geladenen Bild)


[code:1]tell application "Safari"
 activate
 -- Hier wird das aktuelle Bild im Internet angesteuert.
 repeat with i from 1 to 10
  tell application "System Events" to keystroke "l" using command down
  set URL of document 1 to item i of my FinalGrabPath
  -- Hier wird das aktuelle Bild lokal gespeichert.
  tell application "System Events" to keystroke "s" using command down
  save document 1 as file in item i of my FinalSavePath
 end repeat
end tell[/code:1]

Habe ich hier Quatsch geschrieben oder lässt sich das Problem mit einer Warteschleife o.ä. lösen? BITTE HÜLFE!

@ Hans: Wein bekommen?
X

Safari: Warteschleife...

Hans Haesler
  
Beiträge gesamt: 5826

5. Sep 2005, 09:54
Beitrag # 2 von 8
Beitrag ID: #420127
Bewertung:
(2320 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Edgar,

nein, es ist noch kein Wein eingetroffen (sonst hätte ich mich sofort bedankt).

Zu Deinem Problem. Kannst Du noch etwas mehr Angaben machen, damit ich die
Sache schneller rekonstruieren kann. Wie gehst Du genau vor? Wie sind die Variablen
'FinalGrabPath' und 'FinalSavePath' definiert?

Gruss, Hans


als Antwort auf: [#420126]

Safari: Warteschleife...

Anonym
Beiträge gesamt: 22827

5. Sep 2005, 11:02
Beitrag # 3 von 8
Beitrag ID: #420128
Bewertung:
(2320 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hä? Wein noch nicht da? Wir forschen nach!

Ansonsten habe ich das Problem schon gelöst. Ich habe ein delay <Sekunden> eingebaut. Jetzt funktioniert es wunderbar.

Man könnte den threat also eigenlich hier löschen... ;-)


als Antwort auf: [#420126]

Safari: Warteschleife...

Hans Haesler
  
Beiträge gesamt: 5826

5. Sep 2005, 11:16
Beitrag # 4 von 8
Beitrag ID: #420129
Bewertung:
(2320 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Edgar,

super, dass es jetzt klappt. Allerdings ist es immer so eine Sache mit 'delay'.
Zu grosszügig definiert: Die Ausführung dauert viel länger. Zu knapp berechnet:
Bei Ausnahmen wird die Pause nicht genügen.

Den Thread löschen? Wäre schade, denn Safari-Scripts und UI-Scripting sind
hier Mangelware.

Gruss, Hans


als Antwort auf: [#420126]

Safari: Warteschleife...

Hans Haesler
  
Beiträge gesamt: 5826

9. Sep 2005, 22:23
Beitrag # 5 von 8
Beitrag ID: #420130
Bewertung:
(2320 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Edgar,

der Wein ist angekommen! :-)

Das hat mir jedenfalls unsere Poststelle mitgeteilt. Ich werde das Paket morgen früh abholen gehen.
Herzlichen Dank!

Gleich danach fahren meine Frau und ich mit dem Panoramic-Express nach Gstaad zur CountryNight 2005:
http://www.countrynight-gstaad.ch/

Und ab Montag schalten wir eine Ferienwoche ein: http://www.remorino.ch/

Zwei verdiente "Breaks", nach den letzten arbeitsreichen Wochen.

Gruss, Hans


als Antwort auf: [#420126]

Safari: Warteschleife...

Goar
Beiträge gesamt: 395

14. Feb 2006, 16:23
Beitrag # 6 von 8
Beitrag ID: #420131
Bewertung:
(2320 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Hans, hallo Ed,

wie gut, dass Ihr diesen Thread nicht gelöscht habt. Ed&#146;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 tell
Code
Wie Ihr seht, habe ich die Zeile 

tell 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


als Antwort auf: [#420126]

Safari: Warteschleife...

Anonym
Beiträge gesamt: 22827

14. Feb 2006, 16:36
Beitrag # 7 von 8
Beitrag ID: #420132
Bewertung:
(2320 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Goar, hallo Hans,

ja, sehr geil... Und schön, mal wieder hier zu sein. Ich lasse mittlerweile hier mehr als 60% (kein Witz!) aller Arbeiten &#150; auch wenn sie noch so individuell und unskriptbar scheinen &#150; per skript ablaufen. Anstoß dazu hat dieses Forum hier gegeben! VIELEN DANK!

Bis bald, Edgar


als Antwort auf: [#420126]

Safari: Warteschleife...

Hans Haesler
  
Beiträge gesamt: 5826

14. Feb 2006, 16:48
Beitrag # 8 von 8
Beitrag ID: #420133
Bewertung:
(2320 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Goar,

vielen Dank für Deine interessanten und ausführlichen Infos. Wenn es bei uns wieder
einmal etwas ruhiger geworden ist, werde ich mir das Ganze näher ansehen.


Hallo Edgar,

bitteschön. :-) Happy scripting!


Gruss, Hans


als Antwort auf: [#420126]
X