2012-05-23 19 views
5

firefoxを使用してダウンロードするには、selenium webdriverを使用しています。現時点では、私のスクリプトは、ダウンロードが開始された後、特定の時間待ってからfirefoxを閉じます。ダウンロードの完了時に自動的にFirefoxを閉じるように設定する方法があるかどうかを知りたいのですが?または、selenium webdriverを使用して、ダウンロードが完了したかどうかを確認できますか?私はスクリプトに依存関係を追加するかもしれないので、私はどんなアドオンも使いたくない。私はwget/curlなどを使ってファイルをダウンロードすることはできません。 ありがとうございますダウンロードが完了すると自動的にfirefoxを閉じる

答えて

2

に役立ちます願っています。ダウンロードパスをポーリングすることは、おそらく最良の(最も堅牢な)ソリューションです。

代替#1:

FirefoxProfileDownload Statusbarとのアドオンを使用してください。 「ウィンドウが閉じられた後にダウンロードマネージャーでダウンロードを続ける」(または非常に似たような)便利なオプションがあるので、ダウンロードが完了するまでFirefoxがバックグラウンドで実行されます。

代替#2:

可能な場合は、this(または任意の他の同様のwebdriverをフレンドリーなツール)を使って直接ファイルをダウンロードしてください...またはthis。そうすれば、Firefoxをプロセスから完全になくすことができます。

+0

データポイントと同様に、ダウンロードステータスバーへのリンクが古いプラグインを指しています。それをインストールすると(あまり注意を払わなかったので)、シマンテックは約1ページにアドウェアが詰まっているために、フリークアウトします。更新されたリンク:https://addons.mozilla.org/en-us/firefox/addon/download-status-bar/ –

1

これがうまくいくかどうかわかりませんが、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(); 

は、イグナシオ・コントレラスが言っ

+0

ありがとうございますIgnacio。しかし、問題は、与えられた時間に、複数のfirefoxのインスタンスが実行可能であることです。複数のfirefoxインスタンスを同じ場所にダウンロードすることができます。 –

+0

まあ、これらのインスタンスのそれぞれがダウンロード場所をポーリングして、それらの尊重のダウンロードの.partファイルを探します(インスタンスがJava実行コードの別々のインスタンスからスローされた場合)。 すべてが同じプログラムから実行されている場合は、ファイル名の配列を作成して、必要に応じて各firefoxインスタンスを閉じる独自のポーリングドライバを投げることができます。 –

2

次のコードを使用してポーリングを行うにはセレンwebdriverをAPIのWebDriverWaitクラスを使用することができます。

 (new WebDriverWait(driver, 180, 10)).until(new ExpectedCondition<Boolean>() { 
      public Boolean apply(WebDriver d) { 
       return !downloadedFilePart.exists(); 
      } 
     }); 

いずれかのダウンロードが完了するまで.part拡張プログラムとファイルの上記のコードのチェックは10秒ごとのためにダウンロードしていますか3分後にタイムアウトしました。

関連する問題