如何单击具有特定文本的按钮?

时间:2012-06-20 02:50:44

标签: javascript button greasemonkey

我正在尝试修改下面的脚本,点击网站上的这样一个按钮:

<button id="checkPrice-02070" onclick="checkPrice(02070,null); return false;" class="orangeDark">
  <span>check price</span>
</button>

我正在使用以下代码。到目前为止,页面似乎一直在重装;没有别的事情发生 对新人的任何建议?

(function () {
    window.addEventListener("load", function (e) {
        clickConfirmButton()
    }, false);
})();

function clickConfirmButton() {
    var buttons = document.getElementsByTagName('button');
    var clicked = false;
    for (var index = 0; (index < buttons.length);  index++) {
        if (buttons[index].value == "check price") {
            buttons[index].click();
            clicked = true;
            break;
        }
    }
    if (!clicked) {
        setTimeout("window.location.reload()", 300 * 1000);
    }
}

1 个答案:

答案 0 :(得分:0)

<button> value不是可见文字。您想要搜索textContent

<强>然而

  1. 如果该示例HTML正确无误,那么您最好搜索以checkPrice开头的ID。请参阅以下代码。

  2. 如果找不到按钮,您确定要重新加载吗?如果它是由AJAX添加的,这不是最好的方法。请参阅this answer

  3. 不要将setTimeout与字符串(评估)参数一起使用。请参阅以下代码。

  4. 您无需将代码包装在匿名函数中。

  5. 无论如何,这应该有效,给定样本HTML:

    window.addEventListener ("load", clickConfirmButton, false);
    
    function clickConfirmButton (zEvent) {
        var button = document.querySelector ("button[id^='checkPrice']");
        if (button) {
            button.click ();
        }
        else {
            setTimeout (function () { location.reload(); }, 300 * 1000);
        }
    }
    


    要检查按钮文本,请使用:

    function clickConfirmButton (zEvent) {
        var buttons = document.querySelectorAll ("button[id^='checkPrice']");
        var clicked = false;
    
        for (var index = 0, numBtn = buttons.length;  index < numBtn;  ++index) {
            if (/check price/i.test (buttons[index].textContent) ) {
                buttons[index].click();
                clicked = true;
                break;
            }
        }
        if (!clicked) {
            setTimeout (function () { location.reload(); }, 300 * 1000);
        }
    }