Bei Safari Seiten hinter Links speichern

S

StruppiMac

Mitglied
Thread Starter
Dabei seit
18.05.2006
Beiträge
2.862
Reaktionspunkte
39
Hi, ich habe eine Internetseite, auf der ca 40 Links zu Unterseiten sind, hinter denen jeweils eine Seite ist, mit einem Text und einem Bild. Jetzt möchte ich regelmäßig diese Informationen (Überschrift und Bild) von allen 40 Links laden und in ein großes PDF File intereinander packen. Soweit sogut. Mit Automator hab ich es schon versucht, aber das ist so rudimentär, da hängts schon daran, dass ich nicht Bild und Text aus der Unterseite rausbekomme. Jetzt wollte ich's mal mit Applescipt versuchen, aber irgendwie bekomme ich es nicht hin, dass das Script auf die Startseite geht und irgendwie die Links nacheinander durchgeht. Danke schonmal
 
das folgende Skript erstellt eine neue html Datei mit der ersten H2 Überschrift und dem ersten Bild aller verlinkten Seiten

Ein Flaschenhals ist das Entfernen möglicher Zeilenumbrüche.
ggf. sind noch weitere ASCII Codes nötig zB 13
oder es geht ganz ohne, dass hängt davon ab, womit die html-Dateien erzeugt wurden

Code:
set QuelltextAllerSeiten to ""
set QuelltextAllerSeitenOhneReturn to ""

tell application "Safari"
	set alleLinks to do JavaScript "var l='';for (var i = 0; i < document.links.length; i++){ l = l + document.links[i].href+ ',';}" in front document
	set AppleScript's text item delimiters to ","
	set alleLinks to every text item of alleLinks
	
	repeat with i from 1 to (number of items of alleLinks) - 1
		set URL of front document to item i of alleLinks
		--set Quelltext to do JavaScript "document.body.innerHTML;" in front document
		--set QuelltextAllerSeiten to QuelltextAllerSeiten & Quelltext
		
		set Ueberschrift to do JavaScript "document.getElementsByTagName('h2')[0].firstChild.data;" in front document
		set Ueberschrift to "<h2>" & Ueberschrift & "</h2>"
		set Bild to do JavaScript "document.images[0].src;" in front document
		set Bild to "<img src=\"" & Bild & "\"><br>"
		set QuelltextAllerSeiten to QuelltextAllerSeiten & Ueberschrift & Bild
	end repeat
end tell

set QuelltextAllerSeitenOhneReturn to austauschen(ASCII number 10, "", QuelltextAllerSeiten)

do shell script "echo '" & QuelltextAllerSeitenOhneReturn & "' > ~/temp.html"
do shell script "/System/Library/Printers/Libraries/convert -f ~/temp.html -o ~/übersicht.pdf; rm ~/temp.html"

--tell application "Safari"	
-- drucken über Safari	
--		do JavaScript ("document.open();document.write('" & QuelltextAllerSeitenOhneReturn & "');  document.close();") in front document
--		print the front document with print dialog -- with properties {target printer:"PDFWriter"} without print dialog
--	end if


on austauschen(suchen, ersetzen, theString) -- Parameters: search, replace, the String 
	--http://www.betabug.ch/austauschen.html
	set olddelis to my text item delimiters
	set my text item delimiters to (suchen)
	tell me to set theList to (every text item of theString)
	set my text item delimiters to (ersetzen)
	set theString to theList as string
	set my text item delimiters to olddelis
	return theString
end austauschen

Wie kann man mit Applescript oder Automator einfach in eine pdf-Datei drucken >>als pdf-Datei speichern<<?
Ich kenne nur:
- Applescript UI Scripting //wegen GUI Änderung durch pdf Workflows aufwendig
- virtuellen PDF Drucker installieren //sehr umständlich, root rechte nötig
- /System/Library/Printers/Libraries/convert //Tempdatei nötig
 
w2lab schrieb:
...- virtuellen PDF Drucker installieren //sehr umständlich, root rechte nötig...

Meiner Meinung nach die beste Lösung. Einmal (nicht so umständlich) installiert lässt er sich von jedem User wie ein gewöhnlicher Drucker ansprechen, also auch per Script.

Grüße,
Flo
 
Hm - also mir ist da jetzt aufgefallen, dass egal was ich mache, Safari anscheinend zu langsam dafür ist.
Es wird also in der Schleife die erste Seite aufgerufen und ausgelesen, aber Safari hat diese Seite noch nicht geladen. Was dazu führt, dass ich nur den Content der Index-Seite bekomme.
 
lässt sich durch Auswertung von document.readyState beheben
siehe Funktion page_loaded(timeout_value) Apple Webseite

http://www.apple.com/applescript/safari/jscript.01.html

Code:
if page_loaded(20) is false then error numner - 128

on page_loaded(timeout_value)
delay 2
repeat with i from 1 to the timeout_value
tell application "Safari"
if (do JavaScript "document.readyState" in document 1) is "complete" then
return true
else if i is the timeout_value then
return false
else
delay 1
end if
end tell
end repeat
return false
end page_loaded
 
Zurück
Oben Unten