1 votos

¿Cómo puedo extraer el contenido de un determinado campo de texto dentro de una página web usando applescript?

¿Cómo puedo utilizar Applescript Y Safari para extraer la respuesta de este sitio: http://www.wolframalpha.com/input/?i=whats+las+significado+de+la vida%3F

Estoy intentando extraer la respuesta en replicable de texto simple. Que es, .txt formato.

Me sale este error:

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

Cuando la aplicación de la siguiente secuencia de comandos:

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>")

3voto

Malik hassan Puntos 16

Aunque la página que usted suministra es devolver una imagen de las respuestas que significa que usted no puede devolver el texto a partir de ella.

El código fuente de la página tiene la respuesta en forma de texto en una función de javascript.

Este applescript es el uso de uno de mis viejos métodos para obtener el texto entre pattens.

Probablemente voy a hacer ahora esta usando ApplescriptOBJC, pero pensé que 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

La actualización.

El OP ha señalado que hay una opción de un menú emergente mostrar la respuesta en el texto.

Esto no es obvio para cualquiera que no esté familiarizado con el sitio. La ventana emergente no existe en el código fuente de la página hasta que haga clic en esta opción, que es la razón por la que no podía encontrar las clases que el OP se refiere en el código fuente de la página.

enter image description here

El primer script de arriba, no es necesario que haga clic en cualquier opción o obtener la ventana emergente.

Pero si por alguna razón usted no podrá utilizar esta secuencia de comandos que se requieren para tener la ventana emergente en la pantalla en primer lugar.:

tell application "Safari"
    set input to do JavaScript "theclass = document.getElementsByClassName('popup ui-draggable')[0]; theclass.getElementsByTagName('PRE')[0].innerHTML;" in document 1
end tell

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X