使用 AppleScript 在 Safari 网页上单击 "div button" & Javascript

Clicking a "div button" on a Safari web-page using AppleScript & Javascript

我遇到了一个与 a few years ago 出现的 post 有关的问题。对此 post 有重要的意见,也有重大的分歧,显然没有明确的答案。所以我想我会再次提出这个问题,但是在我的具体问题的背景下。

目标:

使用 AppleScript/Safari 单击外部网站的多个元素。这工作正常,除了以下 3 "buttons",所有创建在 <div> 元素内:

  1. "Call" 按钮:

    <div role="button" class="goog-inline-block jfk-button jfk-button-primary jfk-button-narrow" tabindex="0" style="-webkit-user-select: none;">Call</div>
    
  2. "Text"按钮:

    <div role="button" class="goog-inline-block jfk-button jfk-button-primary jfk-button-narrow" tabindex="0" style="-webkit-user-select: none;">Text</div>
    

    注意:除了末尾的标签 "Call" 和 "Text" 之外,这 2 个元素完全相同。

  3. "Send" 按钮:

    <div class="goog-button-base-content">Send</div>
    

什么不起作用:

tell application "Safari"
    do JavaScript "document.getElementsByClassName('ClassNameHere')[n].click();" in document 1 
    -- n is the element number, i.e. 0 or 1)
end tell

这 returns missing value 暗示该声明没有 return 任何东西。

问题:

最后,问题:

在回答时最好假设我对 Javacript/JQuery 一无所知(我对 AppleScript 没意见)。所以最好的答案是提供一个示例代码,我可以 cut/paste 到 Applescript 的 do JavaScript 命令中。

  1. 如果以上元素可以通过纯JavaScript点击(首选),请提供示例代码。

  2. 如果纯 Javascript 是不可能的,并且需要 JQuery,请提供一个示例来说明如何在 AppleScript [=23] 中实现 JQuery =]

任何有助于我理解的评论也将不胜感激。提前致谢!

更新:这 return 也是 missing value

tell application "Safari"
do JavaScript "var nlDivs = document.getElementsByTagName('DIV'); for (var i = 0; i < nlDivs.length; i++)  {if (nlDivs[i].innerHTML === 'Send') nlDivs[i].click();" in document 1
end tell

我知道 JavaScript,我可以肯定地告诉你 JQuery 不需要。 现在,您还没有向我们展示您尝试过的确切内容,getElementsByClassName 仅适用于某些浏览器 (IE9+)。 否则,您应该能够对 "Send" 按钮使用以下内容,假设它已经附加了一个 click 事件。我已经为代码段添加了自己的 div 元素。您也可以将其折叠为一行,JavaScript 可灵活搭配白色 space...

  var nlDivs = document.getElementsByTagName('DIV');
  for (var i = 0; i < nlDivs.length; i++) {
    if (nlDivs[i].innerHTML === 'Send')
      nlDivs[i].click();
  }
<div class="goog-button-base-content" onclick="javascript:alert('test');">Send</div>

您不能在此 div

上使用 .click()

但是,您可以创建鼠标事件来模拟鼠标点击 --> dispatchEvent(new MouseEvent(down and up))

示例:从 Google 的“搜索设置”首选项页面单击“保存”按钮 --> https://www.google.com/preferences?hl=en&prev=https://www.google.com/search?sclient%3Dpsy-ab%26client%3Dsafari%26rls%3Den%26q%3Dsomething%26oq%3Dsomething%26gs_l%3Dserp.3..0l4.6210.16721.0.17744.10.5.0.5.5.0.100.413.4j1.5.0....0...1c.1.64.psy-ab..0.10.410.3zydgL94jrw%26pbx%3D1%26bav%3Don.2,or.%26bvm%3Dbv.100742971,d.cWw%26biw%3D1871%26bih%3D1024


HTML代码是

<div id="form-buttons">
    <div role="button" class="goog-inline-block jfk-button jfk-button-action" tabindex="0" style="-webkit-user-select: none;">Save</div>
    <div role="button" class="goog-inline-block jfk-button jfk-button-standard" tabindex="0" style="-webkit-user-select: none;">Cancel</div>
</div>

"保存"在第一个<div role=


脚本:

tell application "Safari"
    do JavaScript "var myDIV = document.getElementById('form-buttons').getElementsByTagName('div')[0];  myDIV.dispatchEvent(new MouseEvent('mousedown')); myDIV.dispatchEvent(new MouseEvent('mouseup'));" in document 1
end tell