使用Applescript删除随机字符链
我想写一个脚本,可以在网页中找到一些特定的数据,并在弹出框中返回 下面的代码适用于给定的字符串。问题是,每次检查新产品时,字符串都会更改 这是检查页面源时的外观:使用Applescript删除随机字符链,applescript,Applescript,我想写一个脚本,可以在网页中找到一些特定的数据,并在弹出框中返回 下面的代码适用于给定的字符串。问题是,每次检查新产品时,字符串都会更改 这是检查页面源时的外观: <randomcharacters<!---->evenmorerandomcharacters<!----> 9999 <!----></div> 9999 在我想要抓取的号码前和我想要抓取的号码后总是有2个。我想要获取的数字之前的随机字符数也不一致 tell applic
<randomcharacters<!---->evenmorerandomcharacters<!----> 9999 <!----></div>
9999
在我想要抓取的号码前和我想要抓取的号码后总是有2个
。我想要获取的数字之前的随机字符数也不一致
tell application "Safari"
set unitsgrab to do JavaScript "document.getElementsByClassName('theclassIwant')[0].innerHTML;" in current tab of window 1
end tell
set units to ""
set theSource to unitsgrab
property leftEdge : "randomcharacters<!---->evenmorerandomcharacters<!---->"
property rightEdge : "<!----></div>"
try
set saveTID to text item delimiters
set text item delimiters to leftEdge
set classValue to text item 2 of theSource
set text item delimiters to rightEdge
set units to text item 1 of classValue
set text item delimiters to saveTID
units
end try
display dialog "Units:" & (units)
告诉应用程序“Safari”
将unitsgrab设置为在窗口1的当前选项卡中执行JavaScript“document.getElementsByClassName('theclassIwant')[0].innerHTML;”
结束语
将单位设置为“”
将源设置为unitsgrab
属性leftEdge:“randomcharactersevenmorerandomcharacters”
属性rightEdge:“
尝试
将saveTID设置为文本项分隔符
将文本项分隔符设置为leftEdge
将classValue设置为源的文本项2
将文本项分隔符设置为rightEdge
将单位设置为classValue的文本项1
将文本项分隔符设置为saveTID
单位
结束尝试
显示对话框“单位:&(单位)
我实际上想做的是告诉脚本删除第二个
之前的所有内容,以便在上面的示例中只显示9999个假设您正确地表示了数据,我认为您不需要担心随机字符。重写文本项分隔符例程,如下所示:
set tid to my text item delimiters
set my text item delimiters to "<!---->"
set classValue to text item 3 of theSource
set my text item delimiters to tid
将tid设置为我的文本项分隔符
将我的文本项分隔符设置为“”
将classValue设置为源的文本项3
将我的文本项分隔符设置为tid
文本项3
应始终是分隔符字符串出现2次和3次之间的文本。您可以使用AppleScripts命令向外舍入。以下是几个例子:
awk
对空间进行管道连接,而是剥离空间
tell application "Safari"
set unitsgrab to do JavaScript "document.getElementsByClassName('theclassIwant')[0].innerHTML;" in current tab of window 1
end tell
set units to do shell script "awk -F \"<!---->\" '{ gsub(/ /, \"\", $3); print $3 }' <<< " & quoted form of unitsgrab
display dialog "Units:" & units
请注意插入符号(^
)指示的其他空格
分配给单位
变量的结果值为:
9999
tell application "Safari"
set unitsgrab to do JavaScript "document.getElementsByClassName('theclassIwant')[0].innerHTML;" in current tab of window 1
end tell
set units to do shell script "awk -F \"<!---->\" '{ gsub(/^[ \\t]+/, \"\", $3); gsub(/[ \\t]+$/, \"\",$3); print $3 }' <<< " & quoted form of unitsgrab
display dialog "Units:" & units
再次注意插入符号(^
)指示的其他空格
分配给单位
变量的结果值为:
1234
^ ^^
请注意,内部空格已被保留,只有前导和尾随空格已被删除。(此处的插入符号仅用于说明)为了更好地理解上面的
awk
命令,我建议阅读。这里值得注意的区别是,在这些AppleScript示例中需要一些额外的字符转义(即使用反斜杠\
),以确保有效的语法。例如;双引号“
变成\”
和\t
变成\\t
编辑:
gsub
部分。例如:
tell application "Safari"
set unitsgrab to do JavaScript "document.getElementsByClassName('theclassIwant')[0].innerHTML;" in current tab of window 1
end tell
set units to do shell script "awk -F \"<!---->\" '{ print $3 }' <<< " & quoted form of unitsgrab
display dialog "Units:" & units
告诉应用程序“Safari”
将unitsgrab设置为在窗口1的当前选项卡中执行JavaScript“document.getElementsByClassName('theclassIwant')[0].innerHTML;”
结束语
如果将set units到“
直到并包括end try
的所有代码行替换为以下一行,则根据示例代码设置shell脚本“awk-F\”{print$3}的执行单位:set units to do shell script”/usr/bin/awk'BEGIN{FS=\“\”;{print$3}@RobC,当awk
可以通过添加gsub(//,\“\”,$3)来完成这一切时,为什么要使用&“| xargs”
在print$3
前面,这样就不需要额外的管道和额外的外部命令了?设置执行shell脚本“awk-F\”\“{gsub(/,\“\”,$3);print$3}@user3439894的单位,这仅仅是因为我通过手机写了这条评论(即没有要测试的计算机)我不确定语法。但是,是的,利用awk
删除前导和尾随空格是另一种选择。但是,请注意,您的示例会删除所有空格,包括任何内部空间在2.示例B中:仅排除前导空格和尾随空格,您不一定需要使用两个单独的gsub
命令,因为带有以下regex
的命令处理它:awk-F''{gsub(/^[\t]+\124;[\ t]+$/,\“\”,$3);print$3}“
@user3439894-谢谢你的评论/建议。是的,我也看到了我链接到的单曲gsub
的用法。正如谚语所说:“煮鸡蛋的方法不止一种……”:)