Нужно нажать Popup с Gm скриптом, который не всегда есть

У меня все еще есть проблема, нажимая всплывающую кнопку на сайте аукциона, которая появляется, только если вы выиграли аукцион. Это всплывающее окно кажется проблемой. Мне удалось частично получить помощь в " Нужно нажать кнопку ставки с помощью скрипта Grease monkey", я могу получить кнопки ставки, но всплывающее окно все еще остается проблемой. Xpath для всплывающего окна:

.//*[@id='ctl00_mainContentPlaceholder_Button3' ]

И сценарий, который я использую в настоящее время:

// ==UserScript==
// @name           click popup try1.3
// @include         http://www.trada.net/*

// ==/UserScript==


//  ctl00_mainContentPlaceholder_Button3

function PopClick ()
{var PopBtn1=document.getElementById("ctl00_mainContentPlaceholder_Button3");




alert('try1');      
PopBtn1.click (1);
alert('finished');
};

PopClick();

Но проблема, кажется, в том, что скрипт не остается активным на странице в ожидании всплывающего окна, я думаю, если я смогу заставить его "ждать" появления всплывающего окна, он должен работать. Я очень новичок в GM, так что извините, если есть простые ошибки. Мне очень помогли такие люди, как Брок Софар, который показывает мне веревки. Медленно, но верно я получаю навык. Удалите оповещения, я просто использовал их, чтобы посмотреть, выполняются ли они.

1 ответ

Решение

Простейшим решением было бы запустить эту функцию, скажем, каждую секунду, таким образом "ожидая" появления всплывающего окна:

setInterval(PopClick, 1000);

Также лучше переписать PopClick для проверки наличия элемента перед вызовом click, например так:

function PopClick () {
    var PopBtn1=document.getElementById("ctl00_mainContentPlaceholder_Button3");
    if(PopBtn1) {
        PopBtn1.click ();
        // It is also makes sense to clear interval here. see docs for setInterval/clearInterval please :)
    }
};

Может быть, это поможет вам с проблемой замораживания.

Однако более правильным способом было бы настроить прослушиватель MutationEvent. Поскольку вы используете Firefox, он должен работать нормально:

function click_if_popup(evt) {
    if(evt.target.hasAttribute('id') && evt.target.getAttrubute('id') =="ctl00_mainContentPlaceholder_Button3")
    evt.target.click();
}

document.addEventListener('DOMNodeInsertedIntoDocument', click_if_popup);

Извините, я не тестировал этот код: я просто хотел дать вам общее представление о том, где копать.

Другие вопросы по тегам