0

この例では、1 つのペイパル ページを読み込み、ログインを求められます。ログインすると、ペイパル側で他の JavaScript を使用してページが変わります。この移行では、アドレスは変更されず、ソース コードも実質的に変更されません。最初のクリックの後、ロードされる要素を取得できるように、スクリプトを十分に長く待機させる方法を見つけようとしています。以下を使用して、これをかなり簡単に行うことができると思いました。

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

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

スクリプトが実行されると、最初のボタンがクリックされ、ページが遷移しますが、読み込まれる 2 番目のボタンはクリックされません。私のjavascriptコンソールはエラーを報告せず、要素を「取得」できることを示唆しています。しかし、なぜそれをクリックしないのかわからない。

4

1 に答える 1

2

他に何もないとしても、一定の間隔で「continue」要素の存在をいつでもポーリングできます。

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 に答える