ฉันจะแยกเนื้อหาของฟิลด์ข้อความที่ระบุไว้ในหน้าเว็บโดยใช้ applescript ได้อย่างไร


1

ฉันจะใช้ Applescript และ Safari เพื่อแยกคำตอบจากไซต์นี้ได้อย่างไร: http://www.wolframalpha.com/input/?i=whats+the+meaning+to+life%3F

ฉันพยายามแยกคำตอบเป็นข้อความธรรมดาที่คัดลอกได้ นั่นคือ, .txt รูป

ฉันได้รับข้อผิดพลาดนี้:

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

เมื่อใช้งานสคริปต์ต่อไปนี้:

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

1
จากรูปลักษณ์ของเว็บไซต์ คำตอบนั้นเป็นภาพทั้งหมด ดังนั้นคุณไม่สามารถแยกข้อความได้ !!
markhunte

ใช่ แต่มีตัวเลือกที่จะได้รับคำตอบในรูปแบบข้อความธรรมดาที่สามารถคัดลอกได้ ... และข้อความนั้นอยู่ในรหัส html ที่ระบุไว้ในสคริปต์ด้านบน
Phoenix Ebner

คงจะดีถ้าคุณอธิบายว่านักเก็ตอย่างชัดเจนในคำตอบของคุณ เราทุกคนไม่ได้ใช้เว็บไซต์ แต่อย่างไรก็ตามโชคดีที่คำตอบหลักของฉันทำงานได้ดีกว่าเพราะคุณไม่ต้องคลิกเลยฉันได้อัปเดตคำตอบของฉันแล้ว
markhunte

2
@rob โพสต์นี้กำลังถามเกี่ยวกับ Applescript แม้ว่ามันจะดีกว่าใน stackexchange คุณแน่ใจหรือว่าไม่อยู่หัวข้อ: นี่คือข้อความจาก: apple.stackexchange.com/help/on-topic Code-level programming questions (cocoa, LLVM, etc…) **are off-topic here**. We do encourage AppleScript, Automator, and UNIX shell scripting questions as well as how to use tools like Xcode for non-language specific tasks. "
markhunte

คำตอบ:


3

แม้ว่าหน้าเว็บที่คุณระบุจะส่งคืนภาพของคำตอบซึ่งหมายความว่าคุณไม่สามารถส่งคืนข้อความได้

แหล่งที่มาของหน้ามีคำตอบในรูปแบบข้อความในฟังก์ชั่นจาวาสคริปต์

applescript นี้ใช้หนึ่งในวิธีเก่าของฉันเพื่อรับข้อความระหว่างรูปแบบ

ฉันอาจจะทำสิ่งนี้โดยใช้ ApplescriptOBJC แต่คิดว่าควรเก็บไว้ใน Applescript ด้วยเส้นประของเชลล์ เพราะอาจจะเข้าใจได้มากกว่า

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

ปรับปรุง

OP ได้ชี้ให้เห็นว่ามีตัวเลือกให้ป๊อปอัปแสดงคำตอบเป็นข้อความธรรมดา

สิ่งนี้ไม่ชัดเจนสำหรับผู้ที่ไม่คุ้นเคยกับเว็บไซต์ ป๊อปอัพไม่มีอยู่ในแหล่งที่มาของหน้าจนกว่าคุณจะคลิกตัวเลือกนี้ซึ่งเป็นเหตุผลที่ฉันไม่พบคลาสที่ OP อ้างถึงในแหล่งที่มาของหน้า

enter image description here

สคริปต์แรกด้านบนไม่ต้องการให้คุณคลิกตัวเลือกใด ๆ หรือรับป๊อปอัป

แต่ถ้าด้วยเหตุผลบางอย่างคุณสามารถใช้สคริปต์นี้ซึ่งจะทำให้คุณต้องมีป๊อปอัพแสดงก่อน:

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.