使用 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>
元素内:
"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>
"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 个元素完全相同。
"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 任何东西。
问题:
- 有人说
click()
可以在这个设置下工作,尽管它没有像上面实现的那样工作
- 其他人说 JQuery 是必需的。但是,我需要使用 Applescript/Safari 并且我读到 JQuery 在此设置中本身不可用。
最后,问题:
在回答时最好假设我对 Javacript/JQuery 一无所知(我对 AppleScript 没意见)。所以最好的答案是提供一个示例代码,我可以 cut/paste 到 Applescript 的 do JavaScript
命令中。
如果以上元素可以通过纯JavaScript点击(首选),请提供示例代码。
如果纯 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))
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
我遇到了一个与 a few years ago 出现的 post 有关的问题。对此 post 有重要的意见,也有重大的分歧,显然没有明确的答案。所以我想我会再次提出这个问题,但是在我的具体问题的背景下。
目标:
使用 AppleScript/Safari 单击外部网站的多个元素。这工作正常,除了以下 3 "buttons",所有创建在 <div>
元素内:
"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>
"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 个元素完全相同。
"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 任何东西。
问题:
- 有人说
click()
可以在这个设置下工作,尽管它没有像上面实现的那样工作 - 其他人说 JQuery 是必需的。但是,我需要使用 Applescript/Safari 并且我读到 JQuery 在此设置中本身不可用。
最后,问题:
在回答时最好假设我对 Javacript/JQuery 一无所知(我对 AppleScript 没意见)。所以最好的答案是提供一个示例代码,我可以 cut/paste 到 Applescript 的 do JavaScript
命令中。
如果以上元素可以通过纯JavaScript点击(首选),请提供示例代码。
如果纯 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))
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