需要单击弹出窗口,而Gm脚本并不总是存在

时间:2011-06-04 11:39:30

标签: xpath greasemonkey

我点击auction site上的弹出式按钮时仍然遇到问题,只有在您赢得拍卖时才会显示。这个弹出窗口似乎是一个问题。我设法在Need to click a bid button with Grease monkey script部分得到了帮助,我可以点击出价按钮,但popu是个问题。弹出窗口的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();

但问题似乎是脚本在等待弹出窗口的页面上保持活动状态,我想如果我能让它“等待”弹出窗口出现,它应该可以工作。我对通用汽车很新,所以如果有简单的错误就是借口。我得到了Brock sofar等人的慷慨帮助,他正在向我展示绳索。慢慢地但我肯定会抓住它。删除警报,我只是用它们来查看它是否正在执行。

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是运行此函数,比如说每秒,从而“等待”弹出窗口出现:

setInterval(PopClick, 1000);

最好在调用click之前重写PopClick以检查元素是否存在,如下所示:

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

抱歉,我没有测试任何此类代码:我只是想让您了解挖掘的位置。