Нужно нажать Popup с Gm скриптом, который не всегда есть - PullRequest
0 голосов
/ 04 июня 2011

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

. // * [@ ид = '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 Ответ

1 голос
/ 04 июня 2011

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

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 listener. Поскольку вы используете 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);

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

...