2013-04-11 62 views
0

在這個例子中,我加載了一個單獨的paypal頁面,其中提示我登錄。一旦我登錄,頁面就會改變,通過在paypal的最後使用其他javascript。這個轉換地址不會改變,源代碼也不會以任何實質的方式改變。我試圖找到一種方法讓我的腳本在第一次點擊後等待足夠長的時間,以便能夠獲取加載後的元素。我以爲我可以使用下面的做到這一點很簡單:document.getElementById不返回null,但也沒有做我想要的。在javascript控制檯中沒有錯誤

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

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

當執行腳本,第一個按鈕被點擊,頁面過渡,但它不會點擊第二個按鈕的負荷。我的JavaScript控制檯不報告任何錯誤,表明它能夠「獲取」元素。不知道爲什麼它不會點擊它。

+1

你是否在document.getElementById(「continue」)中獲得「繼續」。 – 2013-04-11 18:33:27

+0

也許'continue'被代碼綁定,並且代碼會將其放到其他位置,並且當您單擊時還沒有綁定。 – TheBrain 2013-04-11 18:44:07

+0

好的,我嘗試了大約25次腳本,有幾次,劇本確實爲元素「繼續」返回null,這爲TheBrain提供的理論提供了一些可信度。好像window.onload沒有足夠長的等待我的目的。 – user2251126 2013-04-11 18:51:05

回答

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文檔,看看他們是否提供了一種方法來建立一個回調來處理這一點,雖然。這種輪詢技術應該只能用作最後的手段。

+0

那麼,這當然有效。非常感謝你,Dagg Nabbit!你們都是一羣可愛的人。可悲的是,我已經花了數天的時間來解決你在5分鐘內解決的問題。再次感謝。 – user2251126 2013-04-11 19:13:46

+0

好吧,如果可以的話,儘量找到解決問題的方法,這是最後一招。 ;) – 2013-04-11 19:14:29

相關問題