0

在本例中,我加载了一个贝宝页面,提示我登录。一旦我登录,页面就会改变,通过使用贝宝端的其他 javascripts。该地址不会在此转换中更改,源代码也不会以任何实质性方式更改。我试图找到一种方法让我的脚本在第一次单击后等待足够长的时间,以便能够获取之后加载的元素。我想我可以使用以下方法相当简单地做到这一点:

document.getElementById("submitLogin").click();

window.onload = function() {
    document.getElementById("continue").click();
}; 

执行脚本时,单击第一个按钮,页面转换,但不会单击加载的第二个按钮。我的 javascript 控制台没有报告任何错误,表明它能够“获取”该元素。不知道为什么它不会点击它。

4

1 回答 1

2

如果不出意外,您总是可以每隔一段时间轮询“继续”元素的存在:

function clickContinue() {
    var button = document.getElementById("continue");
    return button ? button.click() : setTimeout(clickContinue, 100);
}

document.getElementById("submitLogin").click();
clickContinue();

如果你走这条路,你可能想要包括一个故障保护,这样它就不会运行太久,以防发生意外情况。像这样的东西应该工作:

clickContinue.interval = 100; // Look for "continue" button every 0.1 second
clickContinue.ttl = 10000; // Approximate time to live: 10 seconds ~ 10,000 ms
clickContinue.tries = clickContinue.ttl / clickContinue.interval | 0;

function clickContinue() {
    var button = document.getElementById("continue"),
        interval = clickContinue.interval;
    return button ? button.click() : 
        clickContinue.tries-- && setTimeout(clickContinue, interval);
}
// ...

不过,请查看 PayPal 的 API 文档,看看它们是否提供了一种设置回调来处理此问题的方法。这种轮询技术可能只应作为最后的手段使用。

于 2013-04-11T19:04:43.677 回答