¿Cómo extraigo el contenido de un campo de texto específico dentro de una página web usando applescript?

1

¿Cómo puedo usar Applescript And Safari para extraer la respuesta de este sitio? enlace

Estoy intentando extraer la respuesta en texto plano copiable. Es decir, formato .txt .

Recibo este error:

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

Al implementar el siguiente 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>")
    
pregunta Phoenix Ebner 05.06.2015 - 19:54

1 respuesta

3

Aunque la página que proporcionaste está devolviendo una imagen de las respuestas, lo que significa que no puedes devolver el texto de ella.

La fuente de la página contiene la respuesta en forma de texto en una función javascript.

Este applecript está usando uno de mis métodos antiguos para obtener el texto entre pattens.

Probablemente ahora haría esto usando ApplescriptOBJC pero pensé que sería mejor mantenerlo en Applescript con un guión de shell. Como puede ser más comprensible.

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

Actualizar.

El OP ha señalado que hay una opción para que una ventana emergente muestre la respuesta en texto sin formato.

Esto no es obvio para nadie que no esté familiarizado con el sitio. La ventana emergente no existe en la fuente de la página hasta que hace clic en esta opción, por lo que no pude encontrar las clases a las que hacía referencia el OP en la fuente de la página.

Elprimerscriptanteriornonecesitaquehagasclicenningunaopciónniobtengaslaventanaemergente.

Perosiporalgunarazónlohace,entoncespuedeusarestescriptquerequeriráqueprimerosemuestrelaventanaemergente:

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

Lea otras preguntas en las etiquetas