我是JS的新手,我正试图点击这个按钮:
<a class="simplebutton" href="javascript:void(0);">find</a>
此按钮的XPath为:/html/body/div[5]/div/span[2]/a
,可在this Fiddle显示目标页面的快照。
这是我尝试过的,但它不起作用。 (我正在使用我从http://code.google.com/p/getelementsbyclassname/获得的函数getElementsByClassName
):
document.getElementsByClassName('simplebutton').submit();
答案 0 :(得分:6)
这是一个完整脚本。它使用jQuery作为the :contains() selector。
更新:修改脚本以说明报告的AJAX。
// ==UserScript==
// @name _Click on a specific link
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a major design change
introduced in GM 1.0.
It restores the sandbox.
*/
//--- Note that contains() is CASE-SENSITIVE.
waitForKeyElements ("a.simplebutton:contains('follow')", clickOnFollowButton);
function clickOnFollowButton (jNode) {
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
jNode[0].dispatchEvent (clickEvent);
}
注意:在某些情况下,contains()
术语可能会错误触发。例如,如果有<a class="simplebutton">unfollow</a>
按钮
这是防止误点击的一种方法。像这样修改clickOnFollowButton
函数:
function clickOnFollowButton (jNode) {
if ( ! /^\s*follow\s*$/i.test (jNode.text() ) ) {
/*--- If the node contains anything but "follow" (surrounded by
optional whitespace), don't click it.
*/
return false;
}
var clickEvent = document.createEvent ('MouseEvents');
clickEvent.initEvent ('click', true, true);
jNode[0].dispatchEvent (clickEvent);
}
有几件事:
getElementsByClassName()
返回元素的列表或“集合”。你不能只是.submit()
这样的结果。 .submit()
适用于单个元素。
由于这是一个链接.submit()
无效。 .click()
通常会起作用,但通常不起作用 - 当事件监听器赋予链接权限时(这个问题必须是这样)。
上面给出的clickEvent
代码几乎适用于所有情况。
The page code you gave没有任何链接,class="simplebutton"
和包含find
的文字!
您使用的浏览器是什么?哪个Greasemonkey版本?什么操作系统?
查找并使用适当的javascript引用和适当的DOM引用。问题中列出的参考文献是库,它不是标准的,不包含在您的脚本中(最有可能)。
使用CSS路径,比XPATH更容易,这种事情。 Firebug将显示给定元素的CSS路径
jQuery使用CSS选择器/路径,document.querySelector()
(非jQuery方法)也是如此。
答案 1 :(得分:2)