使用 Applescript 删除随机字符链

Remove a random chain of characters with Applescript

我想写一个脚本,它可以在网页中找到一些特定的数据,return它会出现在弹出框中

下面的代码非常适合给定的字符串。问题是每次检查新产品时,字符串都会更改。

这是检查页面源代码时的样子:

<randomcharacters<!---->evenmorerandomcharacters<!----> 9999 <!----></div>

我要抢的号码前总会有2个<!---->,我要抢的号码后总会有<!----></div>。我要抓取的数字前的随机字符个数也不一致

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)

我真正想要做的是告诉脚本删除直到第二个的所有内容 <!----> 以便在我上面的示例中只显示 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

text item 3 应始终是出现的第 2 次和第 3 次分隔符字符串之间的文本。

您可以使用 AppleScripts do shell script command to shell out to awk。这里有几个例子:


  1. 示例 A : 排除所有 spaces

    这个例子是根据 , (thankyou @user3439894 !), which improves upon the example given in . This avoids piping to xargs,而是通过 awk 去除 spaces。

    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(/ /, \"\", ); print  }' <<< " & quoted form of unitsgrab
    
    display dialog "Units:" & units
    

    但是,此示例确实去除了所有前导、尾随和内部 space(s)。例如,假设分配给 unitsgrab 变量的字符串是:

    <rand56omcharacters<!---->evenmorera11ndomcharacters<!---->  99 9 9 <!---->
                                                               ^^  ^ ^ ^
    

    请注意插入符号 (^) 指示的附加 space。

    分配给 units 变量的结果值为:

    9999
    
  2. 示例 B:仅排除前导和尾随白色space

    以下示例删除 leading/trailing 白色space,并保留任何内部白色space:

    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]+/, \"\", ); gsub(/[ \t]+$/, \"\",); print  }' <<< " & quoted form of unitsgrab
    
    display dialog "Units:" & units
    

    这一次,假设分配给 unitsgrab 变量的字符串是:

    <rand56omcharacters<!---->evenmorera11ndomcharacters<!---->  12 3  4 <!----></div>    
                                                               ^^  ^ ^^ ^
    

    再次注意插入符号 (^) 指示的附加 space。

    分配给 units 变量的结果值为:

    12 3  4
      ^ ^^
    

    注意内部白色space(s) 已被保留,只有前导和尾随白色space 已被删除。 (此处的插入符号仅用于说明目的)


为了更好地理解上面的 awk 命令,我建议阅读 this answer。这里的显着差异是这些 AppleScript 示例中需要一些额外的字符转义(即使用反斜杠 \)以确保语法有效。例如;双引号 " 变成 \" 并且 \t 变成 \t.


编辑:

  1. 示例 C : 保留全白space

    如果您想保留所有前导、尾随和内部白色space,则省略 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  }' <<< " & quoted form of unitsgrab
    
    display dialog "Units:" & units