Come estrarre il contenuto di un campo di testo specificato all'interno di una pagina Web usando applescript?

1

Come posso utilizzare Applescript And Safari per estrarre la risposta da questo sito: link

Sto tentando di estrarre la risposta in testo in chiaro copiato. Ovvero, .txt format.

Ho ricevuto questo errore:

"Can’t make text items 2 thru -1 of "missing value" into type text.

Quando si implementa il seguente script:

to getInputByClass(theClass, num)
    tell application "Safari"
        set input to do JavaScript "
        document.getElementsByClassName('" & theClass & "')[" & num & "].innerHTML;" in document 1
    end tell
    return input
end getInputByClass

to extractText(searchText, startText2, endText)
    set tid to AppleScript's text item delimiters
    set startText1 to "x"
    set searchText to ("x" & searchText)
    set AppleScript's text item delimiters to startText1
    set endItems to text item -1 of searchText
    set AppleScript's text item delimiters to endText
    set beginningToEnd to text item 1 of endItems
    set AppleScript's text item delimiters to startText2
    set finalText to (text items 2 thru -1 of beginningToEnd) as text
    set AppleScript's text item delimiters to tid
    return finalText
end extractText

getInputByClass("popup ui-draggable", 0)

set theText to getInputByClass("r", 0)

set theResult to extractText(theText, "<pre>", "</pre>")
    
posta Phoenix Ebner 05.06.2015 - 19:54
fonte

1 risposta

3

Sebbene la pagina che hai fornito restituisca un'immagine delle risposte, il che significa che non puoi restituire il testo da esso.

L'origine della pagina contiene la risposta in forma di testo in una funzione javascript.

Questo applescript sta usando uno dei miei vecchi metodi per ottenere il testo tra i pattens.

Probabilmente ora lo farei usando ApplescriptOBJC ma pensavo fosse meglio tenerlo in Applescript con un trattino di shell. Come potrebbe essere più comprensibile.

tell application "Safari" to set theString to (source of document 1)

(* Strip the text and only return the last line*)
set input to do shell script "echo " & (quoted form of theString) & "|sed -n \"/stringified/,/mInput/p\" | sed '$!N;$!D'"



global answer

set offSet1 to "\"stringified\": \""
set offSet2 to "\",\"mInput\""


my strip(offSet1, offSet2, input)

return answer
on strip(offSet1, offSet2, thedata)
    (* Use the offsets of the pattens to match the text # thru # *)
    set textNumber1 to (offset of offSet1 in thedata)
    set theData1 to text -1 thru (textNumber1 + (count of offSet1)) of thedata
    set textNumber2 to (offset of offSet2 in theData1)
    set textString2 to text from word 1 to (textNumber2 - 1) of theData1
    set thedata to theData1
    set answer to textString2
end strip

Aggiornamento.

L'OP ha sottolineato che esiste un'opzione per fare in modo che un popup mostri la risposta in testo semplice.

Questo non è ovvio per chi non ha familiarità con il sito. Il popup non esiste nell'origine della pagina finché non fai clic su questa opzione, che è la ragione per cui non sono riuscito a trovare le classi alle quali l'OP si riferiva nell'origine della pagina.

Ilprimoscriptsopranonhabisognodifareclicsualcunaopzioneoottenereilpopup.

Maseperqualchemotivolofai,puoiusarequestoscriptchetirichiederàdivisualizzareprimailpopup.:

tellapplication"Safari"
    set input to do JavaScript "theclass = document.getElementsByClassName('popup ui-draggable')[0]; theclass.getElementsByTagName('PRE')[0].innerHTML;" in document 1
end tell
    
risposta data 06.06.2015 - 01:49
fonte

Leggi altre domande sui tag