質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.09%

「Selenium × IE11 × Python」で、ファイルのダウンロード処理ができない

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 151

M_T3

score 2

前提・実現したいこと

「Selenium × IE11 × Python」の環境でブラウザ処理の自動化を行っています。

あるサイトでのファイルのダウンロード実行時、IEブラウザでは画面下に通知バーが
表示され、そのあとの処理が実行されなくなってしまいます。

通知バー

pyautoguiモジュールを使用して通知バーにカーソルがフォーカスするよう
キーを押下(Alt+N→Tab→Enter→Alt+N→Esc)するコードも組んでみましたが、
そもそもダウンロード後の処理が実行されませんでした。

参考URL:
Selenium WebDriver で IE11/Edge のファイルダウンロードを自動化する

【事象】
ダウンロードを実行(ダウンロードボタンの要素を.click()でクリック)して
通知バー表示後、処理が止まりそれ以降の処理が実行されない。
また、ドライバーのデフォルトのタイムアウト時間経過後に
以下のエラーメッセージが表示され、処理が終了する。

selenium.common.exceptions.TimeoutException: Message: Timed out waiting for page to load.

【期待値】
ダウンロードを実行して通知バー表示後、
通知バーの「保存」ボタンを押下→ダウンロード完了→通知バーを消す
の一連の操作が行えること。

何か方法はありますでしょうか。
ご教示いただければ幸いです。

該当のソースコード

from selenium import webdriver

# ----------------------------------------------------------------------------------------------------
driver = webdriver.Ie(executable_path = "ドライバーのパス")

driver.maximize_window()
driver.get("サイトURL")

dl_btn = driver.find_element_by_xpath("ダウンロードボタンのxpath")
dl_btn.click() # ←ここで止まる

# ファイルのダウンロード後に行いたい処理

driver.quit()

補足情報(FW/ツールのバージョンなど)

OS:Windows10 1909
言語:Python 3.7.3
ブラウザ:IE11 11.900.18362.0
WEBドライバー:IEDriverServer.exe 3.150.1(32bit)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Penpen7

    2020/07/01 05:06

    うまく動かないを、こういう風に期待しているが、現実はこうだという風にもっと言語化してください。

    キャンセル

  • M_T3

    2020/07/01 14:58

    ご指摘いただきありがとうございます。
    内容を修正してみましたが、いかがでしょうか。
    よろしくお願いいたします。

    キャンセル

回答 1

checkベストアンサー

+1

ただページにアクセスしてDLしたいだけならSeleniumよりrequestsを使ったほうがいいです。
参考


Seleniumでいうならば特定の要素をクリックした上でいただいている画像の保存をクリックし。。。となりますが、
この点Seleniumは少し貧弱です。
がっつりJSを埋め込めば行けるとは思いますが。。。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/03 17:20

    ご回答ありがとうございます。

    >ただページにアクセスしてDLしたいだけならSeleniumよりrequestsを使ったほうがいいです。

    ファイルのDLだけであればその通りなのですが、当方ではテストを自動化していまして、
    「ダウンロードボタンを押下することによってファイルがダウンロードできること」を確認しているので、
    requestsライブラリを使った方法ではちょっと要件が違ってきてしまいますね。。

    >この点Seleniumは少し貧弱です。
    >がっつりJSを埋め込めば行けるとは思いますが。。。

    なるほど、やはり何かを呼んで外部から画像認識やら何やらで無理やり動かすくらいしか
    方法はないんでしょうか。。

    キャンセル

  • 2020/07/08 23:03

    すみませんご返信遅くなりました。

    少し難しいかもしれません。
    結局Seleniumで書くとしてもボタンのクリック時に発火するJS(?)を直接発火させるような書き方になるとは思います。
    SeleniumはDOMをいじるものですが、このDLバーはブラウザが出しているものですからね。。。

    キャンセル

  • 2020/07/10 16:31

    >結局Seleniumで書くとしてもボタンのクリック時に発火するJS(?)を直接発火させるような書き方になるとは思います。
    >SeleniumはDOMをいじるものですが、このDLバーはブラウザが出しているものですからね。。。

    承知しました。
    現在のSelenium×Pythonでは難しそうなので、ちょっと別の方法も考えてみたいと思います!
    ご回答ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる