单击带有Applescript的JavaScript / jQuery链接

时间:2012-04-13 13:34:07

标签: javascript applescript

我从未对AppleScript做过多少工作,但我正在尝试自动执行此过程。我有一个需要点击按钮的网站。但是按钮是用JavaScript / jQuery / AJAX实现的,如下所示:

<div id="divIdOfButton" class="someClass">
    <div class="divClassOfButton someOtherClass">
        <img src="imgOfButton">
    <div>

...

<script type="text/javascript">

$(document).ready(function() {
$('#divIdOfButton .divClassOfButton).click(function() {
...
}}

我试了一下没有运气

tell application "Safari"
    activate
    delay 1
    set URL of first document to "http://example.com/"
    do JavaScript "document.getElementById('divIdOfButton').getElementByClassName('divClassOfButton')[0].click()" in front document
end tell

我做了一堆搜索,却找不到任何东西。非常感谢一些帮助。

3 个答案:

答案 0 :(得分:5)

大多数浏览器会忽略对点击事件处理程序it seems的直接调用(显然出于安全原因 - 不要让我开始使用浏览器中的JavaScript安全模型),因此您的click()调用只是什么都不做。您可以通过JavaScript的事件分派机制触发click事件(请参阅this questionanswer of mine)。但是,如果您定位的站点已经包含jQuery,那么您需要做的就是:

tell application "Safari"
    do JavaScript "$('#divIdOfButton .divClassOfButton').click();" in front document
end tell

如果DIV中有多个班级按钮,则需要添加过滤器表达式,即

tell application "Safari"
    do JavaScript "$('#divIdOfButton .divClassOfButton :equ(0)).click();" in front document
end tell

但如果没有这个,你将失去jQuery利用querySelectorAll的性能优势(见jQuery API docs)。

通过触发Safari中Stack Overflow站点的收件箱下拉列表进行测试。

答案 1 :(得分:1)

我会查看UI Browser这对于这些事情很好,我一直都在使用它。

答案 2 :(得分:-1)

我不是Applescript用户,但我可以立即告诉您,getElementByClassName应为getElementsByClassName - 复数形式的“元素”。