Bei Safari Seiten hinter Links speichern

Dieses Thema im Forum "Scripting und Automatisierung" wurde erstellt von StruppiMac, 04.08.2006.

  1. StruppiMac

    StruppiMac Thread Starter MacUser Mitglied

    Beiträge:
    2.835
    Zustimmungen:
    39
    MacUser seit:
    18.05.2006
    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
     
  2. w2lab

    w2lab MacUser Mitglied

    Beiträge:
    125
    Zustimmungen:
    1
    MacUser seit:
    21.02.2006
    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
     
  3. lengsel

    lengsel MacUser Mitglied

    Beiträge:
    4.627
    Zustimmungen:
    53
    MacUser seit:
    25.11.2003
    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
     
  4. StruppiMac

    StruppiMac Thread Starter MacUser Mitglied

    Beiträge:
    2.835
    Zustimmungen:
    39
    MacUser seit:
    18.05.2006
    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.
     
  5. w2lab

    w2lab MacUser Mitglied

    Beiträge:
    125
    Zustimmungen:
    1
    MacUser seit:
    21.02.2006
    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
     
Die Seite wird geladen...
Ähnliche Themen - Bei Safari Seiten
  1. Mischmaster
    Antworten:
    2
    Aufrufe:
    167
    Mischmaster
    03.11.2016
  2. Sascha_77
    Antworten:
    2
    Aufrufe:
    299
    Sascha_77
    30.04.2016
  3. werk
    Antworten:
    2
    Aufrufe:
    285
    werk
    14.01.2016
  4. denisxp
    Antworten:
    8
    Aufrufe:
    341
    Olivetti
    23.11.2015
  5. Nielz
    Antworten:
    27
    Aufrufe:
    4.116
    Nielz
    21.09.2009