javascript - 我如何使用 Greasemonkey 单击此按钮?

标签 javascript click greasemonkey

我是 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();

最佳答案

这是执行该操作的完整脚本。它对 the :contains() selector 使用 jQuery .

更新:修改脚本以说明报告的 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. The page code you gave没有任何链接,与 class="simplebutton"和包含 find 的文本!

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

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

  6. 对于这种事情,使用CSS路径,比XPATH简单多了。 Firebug 将向您显示给定元素的 CSS 路径。
    jQuery 使用 CSS 选择器/路径,document.querySelector() 也是如此。 (一种非 jQuery 方法)。

关于javascript - 我如何使用 Greasemonkey 单击此按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12252701/

相关文章:

javascript - 循环遍历文件夹中的文件数组

javascript - 如何将 MathJax 公式转换为 img

javascript - V8:实现相等测试

javascript - 用于绕过同源策略以访问嵌套 iframe 的用户脚本

javascript - 使用 javascript 获取 cookie 名称和值

Jquery 注册点击未点击的元素的奇怪行为

c# - 如何判断点击事件在哪里触发

python - 在 tkinter 中单击时突出显示文本

javascript - 单击一堆需要等待 Ajax 调用才能继续使用 Greasemonkey 的按钮

javascript - 如何使用 Greasemonkey 重新组织 <ul> 列表?