3

サイトで次のようなボタンをクリックするように、以下のスクリプトを変更しようとしています。

<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);
    }
}
4

1 に答える 1

0

A <button>svalueは可視テキストではありません。あなたは検索したいでしょうtextContent

でも:

  1. そのサンプル HTML が正しければ、で始まる ID を検索したほうがよいでしょうcheckPrice。以下のコードを参照してください。

  2. ボタンが見つからない場合、再読み込みしてもよろしいですか? AJAX によって追加された場合、これは最善の方法ではありません。この回答を参照してください。

  3. setTimeoutそのような (評価する) 文字列引数と一緒に使用しないでください。以下のコードを参照してください。

  4. コードを無名関数でラップする必要はありません。

とにかく、サンプル 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);
    }
}
于 2012-06-20T06:12:11.483 に答える