【问题标题】:AppleScript get rid of missing valueAppleScript 摆脱缺失值
【发布时间】:2016-09-14 19:09:29
【问题描述】:

我正在从 Safari 中的一行中提取一些数字。

这里是脚本的一个小示例

set DATA39 to "0"
set DATA40 to "0"

to getInputByClass2(theClass, num) -- defines a function with two inputs, theClass and num
    tell application "Safari" --tells AS that we are going to use Safari
        set input to do JavaScript "
document.getElementsByClassName('" & theClass & "')[" & num & "].innerHTML;" in document 1 -- uses JavaScript to set the variable input to the information we want
    end tell
    return input --tells the function to return the value of the variable input
end getInputByClass2



getInputByClass2("sortable DATAId", 1)
set theText to Unicode text
set DATA1 to getInputByClass2("sortable DATAId", 1)
###################################################################
getInputByClass2("sortable DATAId", 2)
set theText to Unicode text
set DATA to getInputByClass2("sortable DATA", 2)
################################################################### 

我不知道我收集了多少数据,所以现在,我将脚本限制为前 30 个结果

(数据1,数据2数据3)

唯一的问题是当小于 30 时,我有第一个结果,然后是“缺失值、缺失值、缺失值”

我无法摆脱缺失值文本?

我尝试在脚本之前设置变量

将 DATA1 设置为缺失值 要么 将 DATA1 设置为“” 甚至 将 DATA1 设置为“0”

但运气不好,我知道我的脚本可能是有道理的,我确信有更好的方法来编写脚本,比如使用“重复?”

更新: 告诉应用程序“Safari” 做 JavaScript "var outPut=[]; var arr=document.getElementsByClassName('sortable DATAId');for (var i in arr) {outPut.push(arr[i].innerHTML)};outPut;"在文件 1 --> {"

            <a href=\"/WebObjects/MYSupport.woa/wo/999AAHW44DhfffC5gg7Vh0/9.0.9.7.1.95.1.9.1.9.1.9.5.9.1.3.1\">DSID</a>

    ", "

            998877557

    ", "

            997777557

    ", "

            998877557

    ", "

            998877657

    ", missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value}

结束告诉 告诉应用程序“脚本编辑器” 显示对话框 {"

            <a href=\"/WebObjects/MYSupport.woa/wo/999AAHW44DhfffC5gg7Vh0/9.0.9.7.1.95.1.9.1.9.1.9.5.9.1.3.1\">DSID</a>

    ", "

            998877557

    ", "

            997777557

    ", "

            998877557

    ", "

            998877657

    ", missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value} buttons {"OK"} default button 1
    --> error number -1700 from {"


            <a href=\"/WebObjects/MYSupport.woa/wo/999AAHW44DhfffC5gg7Vh0/9.0.9.7.1.95.1.9.1.9.1.9.5.9.1.3.1\">DSID</a>

    ", "

            998877557

    ", "

            997777557

    ", "

            998877557

    ", "

            998877657

    ", missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value} to string

结果: 错误“无法制作 {\”

            <a href=\\\"/WebObjects/MYSupport.woa/wo/999AAHW44DhfffC5gg7Vh0/9.0.9.7.1.95.1.9.1.9.1.9.5.9.1.3.1\\\">DSID</a>

    \", \"

            998877557

    \", \"

            997777557

    \", \"

            998877557

    \", \"

            998877657

    \", missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value} into type string." number -1700 from {"


            <a href=\"/WebObjects/MYSupport.woa/wo/999AAHW44DhfffC5gg7Vh0/9.0.9.7.1.95.1.9.1.9.1.9.5.9.1.3.1\">DSID</a>

    ", "

            998877557

    ", "

            997777557

    ", "

            998877557

    ", "

            998877657

    ", missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value, missing value} to string

【问题讨论】:

    标签: applescript missing-data


    【解决方案1】:

    只需将所有元素放入一个数组中,使用 javascript 的循环来获取每个元素的innerHtml

    输出将是一个列表,使用这个列表来获取一个项目而不是超过 30 个变量。

    set allData to my getInputByClass2("sortable DATAId")
    -- to get the tenth value, use this --> item 10 of allData 
    
    to getInputByClass2(theClass) -- this return a list of values
        tell application "Safari"
            set r to do JavaScript "var outPut=[]; var arr=document.getElementsByClassName('" & theClass & "');for (var i in arr) {outPut.push(arr[i].innerHTML)};outPut;" in document 1
        end tell
        return strings of r --- this remove all 'Missing Value' from a list of strings
    end getInputByClass2
    

    如果你想限制列表的长度,使用这个

    set allData to my getInputByClass2(theClass, 30) -- 30 values maximum
    -- to get the tenth value in the list, use this --> item 10 of allData 
    
    to getInputByClass2(theClass, num) --this return a list of values
        tell application "Safari"
            set r to do JavaScript "var n=" & num & "; var outPut=[]; var arr=document.getElementsByClassName('" & theClass & "');var tLen=arr.length; if (n>tLen) {n=tLen;}; for (var i = 0; i < n; i++) {outPut.push(arr[i].innerHTML)}; outPut;" in document 1
        end tell
        return strings of r --- this remove all 'Missing Value' from a list of strings
    end getInputByClass2
    

    更新missing value 来自没有innerHTML 的元素。

    要从 字符串 列表中删除 missing value,请使用以下语法 (set myList to strings of someList)。

    我更新了脚本。

    【讨论】:

    • 谢谢,脚本看起来更干净了,但是结果有点出乎意料(在下面的问题中添加)
    • 太好了,非常感谢,我很愚蠢,但是你如何将结果保存在剪贴板中呢?因为我有:脚本错误“无法制作{” DATA"、"998877557"、"997777557"、"998877557"、"998877657"}转换成字符串类型。
    • 这是一个在脚本中使用剪贴板的示例:set the clipboard to myList --:: To在另一个脚本中获取剪贴板:set anotherList to the clipboard as list——这会将 AppleScript 的对象作为列表放入一个变量中。 :: 但是您不能将剪贴板的内容粘贴到任何应用程序中,因为没有应用程序知道什么是 AppleScript 的对象。
    • 我的文字太长,不能放在一个评论中`:`没有信息是不可能正确回答的,因为我不知道你用什么命令得到这个错误,我不知道不知道你想用剪贴板做什么。 :: 请开始一个新问题。
    猜你喜欢
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    相关资源
    最近更新 更多