4

我是 JS 的新手,我正在尝试单击此按钮:

<a class="simplebutton" href="javascript:void(0);">find</a>


这个按钮的 XPath 是: ,在这个 Fiddle/html/body/div[5]/div/span[2]/a可以看到目标页面的快照。

这是我尝试过的,但它不起作用。(我正在使用getElementsByClassNamehttp://code.google.com/p/getelementsbyclassname/获得的功能):

document.getElementsByClassName('simplebutton').submit();
4

2 回答 2

6

这是一个完整的脚本。它使用 jQuery 作为:contains() 选择器

更新:修改脚本以说明报告的 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);
}

几件事:

  1. getElementsByClassName()返回元素的列表或“集合”。你不能只是.submit()这样的结果。.submit()用于单个元素。

  2. 由于这是一个链接.submit()不起作用。.click()通常会起作用,但通常不会 - 当链接由事件侦听器授权时(这个问题必须是这种情况)。

    上面给出的clickEvent代码几乎适用于所有情况。

  3. 您提供的页面代码没有任何链接,class="simplebutton"并且文本包含find

  4. 你使用的是什么浏览器?哪个 Greasemonkey 版本?什么操作系统?

  5. 查找并使用适当的 javascript 参考和适当的 DOM 参考。问题中列出的参考适用于非标准且未包含在您的脚本中(很可能)。

  6. 对于这种事情,使用 CSS 路径,它比 XPATH 容易得多。Firebug 将显示给定元素的 CSS 路径。
    jQuery 使用 CSS 选择器/路径,就像document.querySelector()(非 jQuery 方法)一样。

于 2012-09-04T04:32:06.053 回答
2

您需要使用方法click而不是submit. 您可以submit在要提交表单时使用。

getElementsByClassName还返回一个元素数组,您需要检索您想要的元素然后调用click它。

document.getElementsByClassName('simplebutton')[0].click();​

http://jsfiddle.net/kLDde/

于 2012-09-03T18:47:24.240 回答