Skripte für Safari // Starten mit Privates Surfen // Beenden mit Safari zurücksetzen

gandalf12

Aktives Mitglied
Thread Starter
Dabei seit
23.03.2011
Beiträge
472
Reaktionspunkte
62
Hallo,
ich habe zwei Skripte für Safari gebastelt.

Das erste Skript startet Safari, führt dann "Safari zurücksetzen" aus und aktiviert dann die Option "Privates Surfen"

Code:
tell application "Safari" to activate
tell application "System Events" to tell process "Safari"
	tell menu bar 1
		tell menu "Safari"
			click menu item "Safari zurücksetzen …"
		end tell
	end tell
	repeat until exists window "Safari zurücksetzen"
		delay 0.2
	end repeat
	tell window "Safari zurücksetzen"
		click button "Zurücksetzen"
	end tell
end tell
tell application "Safari" to activate
tell application "System Events"
	click menu item "Privates Surfen" of menu "Safari" of menu bar 1 of process "Safari"
	keystroke return
end tell

Das zweite Skript führt "Safari zurücksetzen" aus und beendet dann Safari.

Code:
tell application "System Events" to tell process "Safari"
	tell menu bar 1
		tell menu "Safari"
			click menu item "Safari zurücksetzen …"
		end tell
	end tell
	repeat until exists window "Safari zurücksetzen"
		delay 0.2
	end repeat
	tell window "Safari zurücksetzen"
		click button "Zurücksetzen"
	end tell
	tell application "System Events"
		click menu item "Safari beenden" of menu "Safari" of menu bar 1 of process "Safari"
		keystroke return
	end tell
end tell

Beide Skripte funktionieren, bieten wahrscheinlich jedoch noch Optimierungspotential.
Ich bitte die Profis und Skripter unter euch diese Skripte zu überprüfen und Verbesserungen dazu zu posten um den Skriptcode evtl. kleiner und effezienter zu machen.
Die Funktionen sollten jedoch im Grundsatz so erhalten bleiben.
Danke
 
GUI-Skripte haben generell das Problem, fragil zu sein: es kann eine echte Benutzereingabe zwischen den "virtuellen" Klick-Events dazwischenfunken, und wenn die Systemsprache z.B. von Deutsch auf Englisch geändert wird, funktioniert das Skript nicht mehr, wenn es Buttons und Menü-Befehle nach Namen ansteuert.

Um solche Schwächen zu vermeiden, würde ich folgende zwei Sachen empfehlen:

  1. statt nach Namen, Menüeinträge nach Nummern ansprechen, und statt das Drücken der Return-Taste zu simulieren, lieber explizit den "OK" Button klicken:
    Code:
    tell app "System Events" to tell process "Safari"
    	set priv_surf to menu item 9 of menu 2 of menu bar 1 -- Menüeintrag "Privates Surfen"
    	click priv_surf
    	click button "OK" of window 1 -- es ist das Dialogfenster im Vordergrund
    end
  2. was das Beenden angeht, gibt es keinen Grund dafür die Menüfunktion zu "klicken", denn schneller, zuverlässiger und einfacher geht es mit
    Code:
    tell app "Safari" to quit
 
Danke für den Tipp,
werde ich heute Abend gleich mal ausprobieren
 
@buridans_esel
Danke für deine nützliche Hilfe.
Ich habe deine Verbesserungsvorschläge in die Skripte einfließen lassen.
Sie sehen nun folgendermaßen aus.
Startet Safari, führt dann "Safari zurücksetzen" aus und aktiviert dann die Option "Privates Surfen"
Code:
tell application "Safari" to activate
tell application "System Events" to tell process "Safari"
	tell menu bar 1
		tell menu "Safari"
			click menu item "Safari zurücksetzen …"
		end tell
	end tell
	repeat until exists window "Safari zurücksetzen"
		delay 0.2
	end repeat
	tell window "Safari zurücksetzen"
		click button "Zurücksetzen"
	end tell
end tell
tell application "Safari" to activate
tell application "System Events" to tell process "Safari"
	set priv_surf to menu item 9 of menu 2 of menu bar 1 -- Menüeintrag "Privates Surfen"
	click priv_surf
	click button "OK" of window 1 -- es ist das Dialogfenster im Vordergrund
end tell

Führt "Safari zurücksetzen" aus und beendet dann Safari.
Code:
tell application "System Events" to tell process "Safari"
	tell menu bar 1
		tell menu "Safari"
			click menu item "Safari zurücksetzen …"
		end tell
	end tell
	repeat until exists window "Safari zurücksetzen"
		delay 0.2
	end repeat
	tell window "Safari zurücksetzen"
		click button "Zurücksetzen"
	end tell
	tell application "Safari" to quit
end tell

Funktioniert beides sehr gut.
Hat noch jemand einen Tipp wie man das Safari zurücksetzen nach dem Schema von buridans_esel verbessern könnte?
Könnte es so aussehen?

set saf_zur to menu item 10 of menu 2 of menu bar 1 -- Menüeintrag "Safari Zurücksetzen"
click saf_zur
click button "OK" of window 1


Funktioniert nur leider nicht, da der Begriff saf_zur wohl so nicht stimmt und das ganze evtl. nicht menu item 10 sein wird.
Von dieser grundsätzlichen Idee sollte es wohl funktionieren.
Könnte mir bitte jemand weiterhelfen?
 
set saf_zur to menu item 10 of menu 2 of menu bar 1 -- Menüeintrag "Safari Zurücksetzen"
click saf_zur
click button "OK" of window 1

Bei mir (Safari version 5.1.2) ist "Safari zurücksetzen" der 11. Menüeintrag (also menu item 11 of...). Dann wird der Bestätigungsdialog eingeblendet, und der "Zurücksetzen" bzw. "Reset" button, wie er je nach Spracheinstellung heißt, scheint dort immer Button Nr. 1 zu sein, also:

click button 1 of window 1
 
Dankeschön.
würde dann heißen z.B.
Code:
set [B]saf_zur [/B]to menu item 11 of menu 2 of menu bar 1 -- Menüeintrag "Safari Zurücksetzen"
click [B]saf_zur[/B]
click button 1 of window 1
Nur durch welchen Ausdruck ersetzte ich das von mir "erfundene" saf_zur ?
 
Habe nun nochmals entsprechende Anregungen in die Skripte einfließen lassen.
Funktionieren einwandfrei und sind um einiges kürzer und effizienter als die ursprünglichen.

Startet Safari, führt dann "Safari zurücksetzen" aus und aktiviert dann die Option "Privates Surfen"
Code:
tell application "Safari" to activate
tell application "System Events" to tell process "Safari"
	set saf_rese to menu item 11 of menu 2 of menu bar 1 -- Menüeintrag "Safari zurücksetzen"
	click saf_rese
	click button 1 of window 1 -- es ist das Dialogfenster im Vordergrund
end tell
tell application "Safari" to activate
tell application "System Events" to tell process "Safari"
	set priv_surf to menu item 9 of menu 2 of menu bar 1 -- Menüeintrag "Privates Surfen"
	click priv_surf
	click button "OK" of window 1 -- es ist das Dialogfenster im Vordergrund
end tell

Führt "Safari zurücksetzen" aus und beendet dann Safari.
Code:
tell application "System Events" to tell process "Safari"
	set saf_rese to menu item 11 of menu 2 of menu bar 1 -- Menüeintrag "Safari zurücksetzen"
	click saf_rese
	click button 1 of window 1 -- es ist das Dialogfenster im Vordergrund
end tell
tell application "Safari" to quit

Was ich leider nicht mehr hinbekommen habe ist das der Scriptcode
click button 1 of window 1
auch bei der Aktivierung des "Privates Surfen" funktioniert.
Dort funktionierte es nur immer in dieser Form
click button "OK" of window 1

Aber was soll´s.
Nochmals Dank an alle die sich beteiligt haben.
 
Wie erreiche ich es denn, daß das Programm nach dem Start aus dem Dock heraus nur den "blauen Punkt" bekommt und sich nicht mit einem weiteren Symbol im Dock ablegt?
 
Hmm,
ich weiß jetzt nicht genau was du meinst, aber ich kann dir mal sagen wie mein Arbeitsablauf ist.
Dabei ist lediglich das Safari Programm mit dem blauen Punkt geöffnet.

Öffne den AppleScript Editor und kopiere den Code hinein.
Drücke dann mal auf Übersetzten und auf Ausführen. Damit kannst du überprüfen ob der Scriptcode sauber läuft.
Speichere nun das ganze als z.B. Apple Script ab.
Ich habe mir nun diese beiden Skripte unter ~/Library/Scripts in einem selbst erstellten Ordner Namens Safari Skripte abgespeichert.
Nun habe ich das kleine Freeware Programm Spark installiert. (Geht aber auch mit der Pro Version von Alfred).
In diesem Programm kannst du deinen Skripten Tastaturkürzel zuweisen. Bei mir z.B. für Safari starten alt+cmd+s oder für safari beenden alt+cmd+b
Von nun an, wenn ich geschützt surfen will, drücke ich nur immer das entsprechende Tastaturkürzel um Safari zu starten oder zu beenden.
 
Ich habe das Script als *.app gespeichert und ins Dock gezogen, das eigentliche Safari-Icon dort gelöscht. Wenn ich nun die *.app starte, erscheint das Safari-Icon zusätzlich im Dock. Eigentlich kein Problem, schöner wäre es jedoch, wenn das neue Icon nach dem Programmstart einfach nur standardmäßig den blauen Punkt bekäme.
 
Ok, das macht natürlich Sinn.
Es sind dann ja beide "Apps" geöffnet.
Ich denke es sollte möglich sein noch Code hinzuzufügen der das "Skript App" automatisch schließt sobald das Skript abgearbeitet und Safari gestartet b.z.w. beendet ist.
Das geht jedoch über mein kleines Scriptwissen hinaus.
Wie gesagt, möchte dir nichts aufdrängen, aber das ganze als reines Skript abgespeichert mit Tastaturkürzel darauf funktioniert astrein.
 
Vielleicht hat ja einer von den Script-Gurus hier noch die finale Idee.
Im übrigen hätte ich mir gewünscht, daß Apple dies mal als feste Einstellung in Safari anbietet.
 
Zurück
Oben Unten