2012-06-20 2 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> s value не видимый текст. Вы хотите найти textContent.

Однако:

  1. Если образец HTML правильно, вы бы лучше искать для идентификаторов, которые начинаются с checkPrice. См. Код ниже.

  2. Вы уверены, что хотите reload, если кнопка не найдена? Если он добавлен 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/.) –

Смежные вопросы