前提・実現したいこと
javaとseleniumを用いて
特定サイト(IE限定)にアクセスし、
ファイルをダウンロードする処理を
java.awt.Robotクラスを用いず実装したい。
(正確にはPCロック等のアクティブ状態に関わらずダウンロードしたい)
よろしくお願い致します。
発生している問題・エラーメッセージ
IEのダウンロードは通知バーが発生する為、java.awt.Robotを用いて実装しました。
しかし、Robotクラスは、アクティブウィンドウにキーを送信する方式ですので
例)
├エクスプローラやeclipse等別のプログラムを起動していた
└PCをロックしていた
上記のタイミングの際に、Robotクラスを用いてキーを送信すると
IE上でボタンを押せていない為、ファイルダウンロードが上手くいきません。
サーバー上で定期実行したい為、現状のプログラムでは実装不可能です。
考察
1.アクティブ状態に関わらずにダウンロードする機能をjavaで実装する。
2.IEダウンロード時の通知バー発生を表示させなくする。
上記2種のどちらかが実装できればと思うのですが。。
【追記】
編集・追記依頼より、
vbs, wshを利用すれば。。との情報を提供いただきました。ありがとうございます。
タグにVBScript WSHを追加させていただきました。
構想としては、
1.java selenium------------------------------------------------
java
1File df = new File("ダウンロード先ファイルディレクトリ"); 2//ボタンの要素を発見し、押下。ダウンロードを実行する。 3WebElement element; 4element = driver.findElement(By.XX("ボタンの要素")); 5element.sendKeys(Keys.chord(Keys.ENTER)); 6//5秒単位でダウンロードファイルの確認をする。200秒程度を上限で 7//ファイルを発見次第繰り返し処理を終了する。 8for (int i = 0; i < 40; i++) { 9 Thread.sleep(5000); 10 if (df.exists()) { 11 break; 12 } else { 13 /** 14 * ★ここでvbs, wshを 15 * ディレクトリ指定で起動する...? 16 **/ 17 } 18} 19
2.vbs wsh ------------------------------------------------------
VBScript
1//記載方が違うと思いますがご容赦下さい。 2★IEの通知バーを検出する。 3if(見つからなかった) { 4 //java側でループ出来るので、処理終了しても良し。 5 //...本当は何度も起動するケースを想定し、こちらで判定すべき? 6else Then //見つかった 7 ファイルのダウンロードボタンを押下する。 8 //ファイル自体の容量により時間がバラバラだと思うので、 9 //待ち時間制御を実装できれば.. 10 //1.出来る場合 11 while(「ダウンロードが完了しました」の通知バーを検出する) { 12 if(見つかった) { 13 vbs wsh側の処理を終了する。 14 } 15 } 16 //2.出来ない場合 17 //返却値 true等1等返し、java側で受け取り、 18 //vbs起動判定条件を追加する 19 // return true; 20]
上記の★に該当する
呼び出し方及び、IE通知バー取得に関する記載が実装できればと思います。
申し訳ないのですが、vbs wshの知識が皆無である為、
見当違いな事を構想しているのかもしれません。
このurlが参考になる等の情報がございましたら、ご教授の程
よろしくお願い致します。
参考資料
IEダウンロードの際、参考にさせていただいた記事
http://rabitarochan.hatenablog.com/entry/2017/11/30/130604
回答1件
あなたの回答
tips
プレビュー