我遇到了与a few years ago帖子有些相关的问题。该帖子有重要意见,也存在重大分歧,显然没有明确答案。所以我想我会再次提出这个问题,但是在我的具体问题的背景下。
使用AppleScript / Safari单击外部网站的多个元素。除了以下3&#34;按钮&#34;之外,这个工作正常,都在<div>
个元素中创建:
&#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>
&#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;。
&#34;发送&#34;按钮:
<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
这会返回missing value
,表明该声明没有返回任何内容。
click()
可以在此设置中使用,但它不能像上面实现的那样工作在回答最好的时候假设我对Javacript / JQuery一无所知(我对AppleScript没问题)。所以最好的答案是提供一个示例代码,我可以将其剪切/粘贴到Applescript的do JavaScript
命令中。
如果可以通过纯JavaScript(首选)点击上述元素,请提供示例代码。
如果无法使用纯Javascript,并且需要JQuery,请提供一个示例,说明如何在AppleScript中实现JQuery (is that was done in this answer?)
任何有助于我理解的评论也将不胜感激。提前谢谢!
更新:这也会返回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
答案 0 :(得分:1)
您无法在此.click()
div
但是,你可以创建鼠标事件来模拟mouseClick - &gt; dispatchEvent(new MouseEvent(down and up))
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具有灵活的空格......
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;