使用GM单击没有名称或ID的按钮

时间:2013-04-28 17:34:56

标签: javascript button greasemonkey

原始PHP代码:

var button='';

button+='<table border="0"id="table1"cellspacing="0"cellpadding="2"><tr><td>';
button+='<button type="submit" name="B5"style="height: 20; background-color: #0000FF; width:20" onclick="submitform(2);"></button></td>';
button+='<td>';button+='<button type="submit" name="B5"style="height: 20; background-color: #FFFF00; width:20" onclick="wrong();"></button></td>';
button+='</tr><tr><td>';button+='<button type="submit" name="B5"style="height: 20; background-color: #008000; width:20" onclick="wrong();"></button></td>';
button+='<td>';button+='<button type="submit" name="B5"style="height: 20; background-color: #FFFFFF; width:20" onclick="wrong();"></button></td>';

var button2='<button type="submit"  name="B6" style="height: 20; background-color: #0000FF; width:20" disabled></button>';

在这种情况下,我想点击onclick值为submitform(2);但没有值或ID且名称相同的按钮。

我迷路了,这就是我尝试过的......

function clickb5 (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'][onclick*=submitform(1);]",
"input[type='submit'][onclick*=submitform(1);]",
clickb5
);

onclick*=submitform(1);也带有()值0,1,2,3,具体取决于页面。

但有一件事......

有人可以帮忙吗?谢谢!

解决方案有效但不是最佳 - 有助于获取随机时间吗?

setTimeout(Greasemonkey_main, 10000);

function Greasemonkey_main () {
unsafeWindow.submitform(0);
unsafeWindow.submitform(1);
unsafeWindow.submitform(2);
unsafeWindow.submitform(3);
}

全部谢谢!

1 个答案:

答案 0 :(得分:1)

该选择器存在一些问题:

  1. input[type='submit'][onclick*=submitform(1);]搜索<input>,但您想要的控件是<button>

  2. [onclick*=submitform(1);]是jQuery中的语法错误。始终将这些值放在引号中。在这种情况下,它将是:[onclick*='submitform(1)']

  3. 随着页面更改,尾随空格和分号趋于消失。因此,请从选择器中省略更耐用的代码。


  4. 您似乎试图点击的实际控件的HTML格式如下:

    <button type="submit" onclick="submitform(1);" ...></button>
    


    为此,您的代码应为:

    waitForKeyElements (
        "button[onclick*='submitform(1)']"",
        clickb5
    );
    
    function clickb5 (jNode) {
        var clickEvent  = document.createEvent ('MouseEvents');
        clickEvent.initEvent ('click', true, true);
        jNode[0].dispatchEvent (clickEvent);
    }
    






    我不推荐它(它可能有时间问题并且它会不必要地使用unsafeWindow),但为了完整性,可能可以用以下代码替换所有代码:< / p>

    unsafeWindow.submitform(1);
    

    同样,不建议这样做,如果网站是AJAX驱动的,它不是一个强大的解决方案。