如何使用Greasemonkey单击此按钮?

Gio*_*gio 4 javascript greasemonkey click

我是JS的新手,我正试图点击这个按钮:

<a class="simplebutton" href="javascript:void(0);">find</a>
Run Code Online (Sandbox Code Playgroud)


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

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

document.getElementsByClassName('simplebutton').submit();
Run Code Online (Sandbox Code Playgroud)

Bro*_*ams 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);
}
Run Code Online (Sandbox Code Playgroud)

注意:在某些情况下,该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);
}
Run Code Online (Sandbox Code Playgroud)

几件事:

  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方法).

  • 这是一个非常大的遗漏.你可能应该赞同这两个答案.无论如何,我没有Instagram帐户,但我将脚本更改为适用于AJAX的位置.无论何时出现该按钮,它都会触发.只要确保它是"跟随"而不是"跟随"(案例对此至关重要). (2认同)