如何让Greasemonkey点击仅在延迟后出现的按钮?

时间:2012-12-16 10:29:35

标签: javascript button click greasemonkey tampermonkey

我已经看到了很多类似的问题,我已经尝试了所有我能想到的东西让我自己开始工作。

首先是相关代码(来自目标页面?):

document.getElementById('btn_submit').innerHTML =
 '<input type="hidden" value="17271" name="idofclick">
  <input type="submit" value=" Click Me Now! " name="submit_com" class="padding2">';

基本上页面上有一个计时器,“现在点击我!”按钮出现在3秒后,这就是我要点击的部分。

这是我的代码。这不起作用:

// ==UserScript==
// @name        abc
// @namespace   something
// @description abc Scripty
// @include     *
// @version     1
// ==/UserScript==
(function ClicktheButton(obj) {
   var evt = document.createEvent("MouseEvents");
   evt.initMouseEvent("click", true, true, window,
   0, 0, 0, 0, 0, false, false, false, false, 0, null);
   var canceled = !obj.dispatchEvent(evt);
   /*

  if(canceled) {
    // A handler called preventDefault
    alert("canceled");
  } else {
    // None of the handlers called preventDefault
    alert("not canceled");
  }
  */
}

var StupidButton = document.querySelector.innerHTML('input[type="submit"][value=" Click Me Now! "]');
ClicktheButton(StupidButton);

1 个答案:

答案 0 :(得分:4)

该代码有错误。使用Firefox的错误控制台( Ctrl Shift J )查看它们。使用jslint检查代码也很有帮助。

无论如何,这是一个常见的Greasemonkey问题。使用the waitForKeyElements() utility来处理该按钮的延迟外观。使用jQuery来简化代码(并使其更加健壮和可移植)。

所以你的脚本会变成:

// ==UserScript==
// @name     _YOUR_NAME
// @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 design change
    introduced in GM 1.0.   It restores the sandbox.
*/

function clickSubmitBtnWhenItAppears (jNode) {
    var clickEvent  = document.createEvent ('MouseEvents');
    clickEvent.initEvent ('click', true, true);
    jNode[0].dispatchEvent (clickEvent);
}

//-- Value match is case-sensitive
waitForKeyElements (
    //"#btn_submit input[type='submit'][value*='Click Me Now']",
    "input[type='submit'][value*='Click Me Now']",
    clickSubmitBtnWhenItAppears
);