单击" div按钮"在Safari网页上使用AppleScript& JavaScript的

时间:2015-08-23 23:09:37

标签: javascript jquery safari applescript

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

目标:

使用AppleScript / Safari单击外部网站的多个元素。除了以下3&#34;按钮&#34;之外,这个工作正常,都在<div>个元素中创建:

  1. &#34; Call&#34;按钮:

    <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. &#34; Text&#34;按钮:

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

    注意:这两个元素是相同的,除了标签&#34; Call&#34; vs&#34; Text&#34;最后&#34;。

  3. &#34;发送&#34;按钮:

    <div class="goog-button-base-content">Send</div>
    
  4. 什么不起作用:

    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
    

    这会返回missing value,表明该声明没有返回任何内容。

    问题:

    • 有人说click()可以在此设置中使用,但它不能像上面实现的那样工作
    • 其他人说需要JQuery。但是,我需要使用Applescript / Safari,并且我已经读过在这种情况下JQuery本身不可用。

    最后,问题:

    在回答最好的时候假设我对Javacript / JQuery一无所知(我对AppleScript没问题)。所以最好的答案是提供一个示例代码,我可以将其剪切/粘贴到Applescript的do JavaScript命令中。

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

    2. 如果无法使用纯Javascript,并且需要JQuery,请提供一个示例,说明如何在AppleScript中实现JQuery (is that was done in this answer?)

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

      更新:这也会返回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
      

2 个答案:

答案 0 :(得分:1)

您无法在此.click()

上使用div

但是,你可以创建鼠标事件来模拟mouseClick - &gt; dispatchEvent(new MouseEvent(down and up))

示例:点击Google搜索设置偏好设置页面中的“保存”按钮 - &gt; 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

答案 1 :(得分:0)

我知道JavaScript,我可以告诉你肯定不需要JQuery。 现在,您还没有向我们展示您尝试过的内容,getElementsByClassName仅适用于某些浏览器(IE9 +)。 否则,你应该可以使用以下内容来发送&#34;发送&#34;假设它已经附加了click事件。我为代码段添加了自己的div元素。您也可以将此折叠为一行,JavaScript具有灵活的空格......

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