使用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命令向外舍入。以下是几个例子:


  • 示例A:排除所有空格

    此示例符合(thankyou@user3439894!),它改进了中给出的示例。这避免了通过
    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
    
  • 示例B:仅排除前导和尾随空格

    以下示例删除前导/尾随空格,并保留任何内部空格:

    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


    编辑:

  • 示例C:保留所有空白

    如果要保留所有前导、尾随和内部空格,请省略
    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
    的用法。正如谚语所说:“煮鸡蛋的方法不止一种……”
    :)