我可以使用applescript自动点击此链接吗?

时间:2019-09-22 01:39:54

标签: applescript browser-automation

我正在编写一个Applescript,以自动完成对我的一张Flickr相册的“ Organizr”页面上的四次单击,以更改照片的顺序。其中三个链接具有ID,因此自动实现这些点击很容易。例如:

clickID3("comm_button_ok")
to clickID3(theId3)
tell application "Safari"
    do JavaScript "document.getElementById('" & theId3 & "').click();" in document 1
end tell
end clickID3

那行得通!

但是如何自动单击此链接?

<a href="#" onclick="_ge('tabl').tabl_get_active_one_set_mat().mat_resort('random'); return false;">Randomly</a>

这是Flickr Organizr页面上用于链接菜单的整批代码:

<div class="candy_menu" id="candy_set_menu_arrange" style="display: block;">
<a href="#" onclick="_ge('tabl').tabl_get_active_one_set_mat().mat_resort('date-taken-asc'); return false;">Arrange by date taken (oldest first)</a>
<a href="#" onclick="_ge('tabl').tabl_get_active_one_set_mat().mat_resort('date-taken-desc'); return false;">Arrange by date taken (newest first)</a>
<a href="#" onclick="_ge('tabl').tabl_get_active_one_set_mat().mat_resort('date-posted-asc'); return false;">Arrange by date uploaded (oldest first)</a>
<a href="#" onclick="_ge('tabl').tabl_get_active_one_set_mat().mat_resort('date-posted-desc'); return false;">Arrange by date uploaded (newest first)</a>
<a href="#" onclick="_ge('tabl').tabl_get_active_one_set_mat().mat_resort('title'); return false;">Alphabetically</a>
<a href="#" onclick="_ge('tabl').tabl_get_active_one_set_mat().mat_resort('random'); return false;">Randomly</a>
<a href="#" onclick="_ge('tabl').tabl_get_active_one_set_mat().mat_resort('reverse'); return false;">Reverse current order</a>
</div>

我知道如何自动单击以打开candy_set_menu_arrange菜单。但是,如何自动点击“随机”呢?

1 个答案:

答案 0 :(得分:1)

anchor元素标签具有事件属性onclick,该属性可准确告诉您单击元素时发生的情况。因此,由于您自己无法发出点击,因此您应该只能将onclick属性(这是JavaScript代码)中的指令直接转发到 Safari 标签:

tell application "Safari" to tell the front document to do JavaScript ¬
    "_ge('tabl').tabl_get_active_one_set_mat().mat_resort('random'); return false;"

否则,您始终可以使用querySelector()方法来定位元素,该方法比getElement...()方法要强大得多。我将让您阅读与之链接的文档,以概述其功能,然后每当需要在特定的语法上移动内存以定位目标元素时,可以参考CSS Selector Reference。各种可能的方式。我将以一种可能的方式来演示,您可以根据该锚点的onclick属性包含单词"random"来区分该锚点,并返回第一个锚点元素以满足以下条件:

document.querySelector('a[onclick*="random"]').click();