Python

【Python】Selenium4 + Firefoxでファイルダウンロードを自働化する環境を構築するサンプルコード

この記事は約6分で読めます。

 

 

案件でDockerでPython+Selenium+Firefoxによるwebスクレイピング環境を構築したのですが、その際にファイルダウンロードやpyinstallerでのexe化でハマったのでメモしておきます

 

前提記事

 

この記事は下記の記事の内容を前提としています。

 

前回の記事:【Python】Docker+Seleniumで自動化環境を構築してVNCでブラウザの動作確認

 

まず前回の記事で作成してリポジトリをさらに改良したものが下記のリポジトリになります

 

リポジトリのURL:

https://github.com/beginerSE/docker_python_selenium4_firefox_pyinstaller

 

 

上記の環境構築でハマった点

 

FireFoxのファイルダウンロードが止まる

 

上記のリポレジトリの環境だとDockerでPython+Selenium4+Firefoxでスクレイピングする環境は構築できているのですが、ファイルをダウンロードした時に、ダウンロードダイアログが出て、それをなんとかできないままダウンロードできずに終わることがありましたがDriver起動時に以下のようなオプションを追加してあげることで解決しました

 

<test.py>

~~~~~~~~~~~~~~~~~~~~~~~~~~~
from selenium.webdriver.firefox.options import Options as FirefoxOptions
from selenium import webdriver
import selenium

options = FirefoxOptions()

# Docker環境用の設定
cloud_options = {}
cloud_options['build'] = "build_1"
cloud_options['name'] = "test_abc"
options.set_capability('cloud:options', cloud_options)


# ダウンロード関連の設定を追加
download_dir = "/app/src/"  # Dockerコンテナ内のパス
options.set_preference("browser.download.folderList", 2)
options.set_preference("browser.download.manager.showWhenStarting", False) # ホップアっプを非表示
options.set_preference("browser.download.dir", download_dir)
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/zip")  # 例: ZIPの場合
# options.set_preference("browser.helperApps.neverAsk.saveToDisk", "text/csv") # csvエクセルファイルの場合

# ドライバー起動
driver = webdriver.Remote(
command_executor=os.environ["SELENIUM_URL"],
options=options
)

~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

追加したのは下記の部分です。これにより指定したMINEタイプのファイルをダウンロードする際はホップアップが表示されなくなります。(指定したMINEタイプ以外のファイルをダウンロードする場合は変わらず表示されるので注意してください)

 

download_dir = "/app/src/" 
# Dockerコンテナ内のパス 
options.set_preference("browser.download.folderList", 2) 
options.set_preference("browser.download.manager.showWhenStarting", False) # ホップアっプを非表示 
options.set_preference("browser.download.dir", download_dir) 
options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/zip") # 例: ZIPの場合

 

options.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/zip")の部分は"application/zip"はダウンロードするファイルのMINEタイプを指定してください(例:csvの場合は”text/csv”)

 

その他のMINEタイプ一覧:https://developer.mozilla.org/ja/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types

 

 

ダウンロードしたファイルが見つからない

 

上記をクリアしてファイルのダウンロードは成功したのですが、そのファイルをローカルで確認できなくてハマりましたが、docker-compose.ymlに「– ./tempDownload:/home/seluser/Downloads」を追記してあげることで解決しました。

 

Docker+Firefoxのスクレイピング環境でダウンロードしたファイルは「/home/seluser/Downloads」に保存されるので、それをローカルでもマウントするように指定することでコンテナ内でダウンロードしたファイルをローカルで確認することができるようになりました

 

<docker-compose.yml>

version: "3"
services:
  selenium:
    container_name: python-selenium-on-docker_selenium
    image: selenium/standalone-firefox-debug:3.141.59
    ports:
      - 4444
      - 5901:5900
    volumes:
      - /dev/shm:/dev/shm
      - ./tempDownload:/home/seluser/Downloads
  app:
    container_name: python-selenium-on-docker_app
    depends_on:
      - selenium
    build: ./app
    volumes:
      - ./app:/app
      - ./tempDownload:/home/seluser/Downloads
    environment:
      SELENIUM_URL: http://selenium:4444/wd/hub
    tty: true

 

終わり

 

このコンテナの起動方法やDockerの設定については下記の記事で説明しているのでそちらを参考にしてください

 

関連記事:【Python】Docker+Seleniumで自動化環境を構築してVNCでブラウザの動作確認

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. […] 関連記事:【Python】Selenium4 + Firefoxでファイルダウンロードを自働化する環境を構築するサンプルコード […]

タイトルとURLをコピーしました