2012-06-20 69 views
1

我想修改下面的腳本,點擊一個按鈕,看起來像這樣的網站上:如何點擊具有特定文本的按鈕?

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

回答

0

一個<button>小號value是不可見的文本。你想要搜索textContent

但是:

  1. 如果樣本HTML是正確的,你會更好搜索以checkPrice啓動IDS。請參閱下面的代碼。

  2. 您確定要如果找不到按鈕,請重新加載?如果通過AJAX添加,這不是最好的方法。請參閱this answer

  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); 
    } 
} 
+0

好極了!它可以工作,但頁面連續點擊按鈕而無需等待任何時間(即使我將setTimeout調整爲300000 x 1000)。有關如何添加額外等待的任何建議? – AAA

+0

你是說它點擊了按鈕,然後重新加載頁面呢?或者以某種方式自動點擊多次?如果其中任何一個爲真,那麼該問題與實際頁面不匹配,或者GM腳本除了指示的代碼之外還有其他事情正在進行。 ...鏈接到目標頁面併發布您正在使用的完整腳本。 (編輯問題,或者打開一個新問題或使用http://pastebin.com/。) –

相關問題