私はselenium webdriverを使用して、Firefoxを使用してダウンロードを行っています。現時点では、スクリプトはダウンロードが開始されてから特定の時間待機し、Firefox を閉じます。ダウンロードの完了時に自動的に終了するように Firefox を設定する方法があるかどうか知りたいですか? または、selenium webdriver を使用して、ダウンロードが完了したかどうかを確認できますか? スクリプトに依存関係が追加される可能性があるため、アドオンを使用したくありません。wget/curl などを使用してファイルをダウンロードすることはできません。前もって感謝します
3 に答える
Selenium WebDriver APIのWebDriverWaitクラスを使用して、次のコードを使用してポーリングを実行できます。
(new WebDriverWait(driver, 180, 10)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return !downloadedFilePart.exists();
}
});
上記のコードは、.part拡張子の付いたファイルをチェックします。プログラムは、ダウンロードが完了するか、3分後にタイムアウトになるまで、10秒ごとにダウンロードされます。
イグナシオ・コントレラスが言ったこと。ダウンロード パスをポーリングすることは、おそらく最良の (最も堅牢な) ソリューションです。
代替#1:
Download StatusbarアドオンFirefoxProfile
と一緒に使用します。「ウィンドウを閉じた後、ダウンロード マネージャーでダウンロードを続行する」(または非常に類似したもの) という便利なオプションがあり、ダウンロードが完了するまで Firefox をバックグラウンドで実行し続けることができます。
代替#2:
これ(または他の同様の WebDriver に適したツール)を使用してファイルを直接ダウンロードします... または可能であれば、これを使用します。これにより、Firefox がプロセスから完全に除外されます。
これが機能するかどうかはわかりませんが、Firefox を介してダウンロード場所を探索することを検討しましたか? ダウンロードが完了するまでポーリングします。
私が間違っていなければ、ファイルがダウンロードされると、拡張子が .part の余分なファイルが存在するはずです。
このようなもの(疑似コード):
...
WebDriver poller = new FirefoxDriver()
poller.get("path to download folder");
while ("file with .part extension is present") {
// Wait/sleep some time
// Refresh poller
}
// close downloading firefox instance
firefox.quit();
// close the polling instance
poller.quit();
それが役に立てば幸い