2012-06-20 93 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/。) –

相关问题