Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 需要用Gm脚本单击弹出窗口,但该脚本并不总是存在_Xpath_Greasemonkey - Fatal编程技术网

Xpath 需要用Gm脚本单击弹出窗口,但该脚本并不总是存在

Xpath 需要用Gm脚本单击弹出窗口,但该脚本并不总是存在,xpath,greasemonkey,Xpath,Greasemonkey,我仍然有一个问题,点击屏幕上的弹出按钮,只有当你赢得了拍卖时才会出现。这个弹出窗口似乎是个问题。我设法得到了部分帮助,我能够点击投标按钮,但popu仍然是一个问题。弹出窗口的xpath是: ./*[@id='ctl00\u mainContentPlaceholder\u Button3'] 我目前使用的脚本是: // ==UserScript== // @name click popup try1.3 // @include http://www.trada

我仍然有一个问题,点击屏幕上的弹出按钮,只有当你赢得了拍卖时才会出现。这个弹出窗口似乎是个问题。我设法得到了部分帮助,我能够点击投标按钮,但popu仍然是一个问题。弹出窗口的xpath是:

./*[@id='ctl00\u mainContentPlaceholder\u 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();

但是问题似乎是脚本在等待弹出窗口的页面上没有保持活动状态,我想如果我能让它“等待”弹出窗口出现,它应该可以工作。我对通用汽车公司很陌生,所以如果有简单的错误,请原谅。我得到了像布罗克·索法这样的人的大力帮助,他正在给我指路。慢慢地,但肯定我已经掌握了窍门。删除警报,我只是使用它们来查看它是否正在执行。

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

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 :)
    }
};
也许这会帮助你解决冻结问题

然而,更合适的方法是设置侦听器。由于您使用的是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);

抱歉,我没有测试任何代码:我只是想让您大致了解在哪里挖掘。

当我像这样使用setInterval(PopClick,1000);,大多数时候,页面都会冻结。如果我把它改成10秒,就可以了。谢谢。@Ludwig,我更新了答案。你可能想试试我补充的另一种方法。