Python Selenium Web 自動操作

Selenium PDF ファイルダウンロード Chromium 画面なし

引き続き Chromium(Chrome) 画面なしで PDF ファイルをダウンロードしてみましょう。
headless の chrome を用いてファイルをダウンロードする機能は デフォルトの chromedriver にはセキュリティ上の観点から搭載されていないようです。
しかたがないので直接 post 通信で設定を送ってあげる必要があります。
以下の内容の 'Page.setDownloadBehavior' コマンドを設定します。
細かな内容はよく理解できませんがおまじないのように書き込みます。

   
  driver.command_executor._commands["send_command"] =(
  "POST",
  '/session/$sessionId/chromium/send_command'
  )
  params = {
  'cmd': 'Page.setDownloadBehavior',
  'params': {
    'behavior': 'allow',
    'downloadPath': download_dir}
  }

'/session/$sessionId /chromium/send_command'
は POST で設定を送り込むパスのようです。
'downloadPath' はあらかじめ
download_dir = "/home/yamada/public_html/download"
と設定しておきます。
絶対パスで指定します。
この辺のところを詳しく書いているサイトを検索してみましたが見つかりませんでした。

ライブラリ取り込み

それでは頭から書き始めます。
取り込む必要があるライブラリは3つです。
from selenium import webdriver
from selenium.webdriver import Chrome
# 待機に必要
import time

PDF をファイルとしてダウンロード

PDF はデフォルトでは Chrome で表示されてしまうので、ファイルとしてダウンロード できるように、
"plugins.always_open_pdf_externally": True
を指定します。


  options = webdriver.ChromeOptions()
	options.add_experimental_option("prefs", {
    "plugins.always_open_pdf_externally": True
	})

headless 設定

headless 設定をして Chromium 画面が表示しないようにします。
options.add_argument('--headless')
後は driver オブジェクトを作成します。
driver = webdriver.Chrome(options=options)

ダウンロード実行

後はおまじないをかけて
driver.execute("send_command", params=params)
で設定

 
  driver.get("https://www.pref.kanagawa.jp/osirase/02/2315/down/kyoshoshomei.pdf")

で get として少し待てば
time.sleep(5)
ダウンロ-ドされます。

Selenium PDF ファイルダウンロード Chromium 画面なしまとめ

ファイル内容をまとめて表示します。

   
  from selenium import webdriver
  from selenium.webdriver import Chrome
  import time
  # 絶対パス
  download_dir = "/home/yamada/public_html/download"
  # print(download_dir)
  options = webdriver.ChromeOptions()
  options.add_experimental_option("prefs", {
    "plugins.always_open_pdf_externally": True
  })
  options.add_argument('--headless')
  driver = webdriver.Chrome(options=options)
  driver.command_executor._commands["send_command"] = (
    "POST",
    '/session/$sessionId/chromium/send_command'
  )
  params = {
    'cmd': 'Page.setDownloadBehavior',
    'params': {
      'behavior': 'allow',
      'downloadPath': download_dir
    }
  }
  driver.execute("send_command", params=params)
  driver.get("https://www.pref.kanagawa.jp/osirase/02/2315/down/kyoshoshomei.pdf")
  time.sleep(5) # 秒
  driver.quit()
  print("End")
  # ブラウザーを終了

本内容を TeraPad 等で作成したら、ファイル名を適当に
sc_sele_pdf-1.py
として保存します。
文字コ-ドは、UTF-8N
BOM なし
改行コ-ドは、LF
です。
保存先はホスト Wimdows OS の 共有フォルダ c:\vb_public_html にしました。
なお、
c:\vb_public_html
はゲスト OS Ubuntu のなかの
/home/yamada/public_html
とリンクしていて共有フォルダの関係にあります。
詳細は ユ-ザ-ごとの公開ディレクトリを用意する を読んでみてください。

Selenium PDF ダウンロード Chromium 画面なしファイル動作確認

Selenium PDF ダウンロードファイル sc_sele_pdf-1.py ファイルの動作確認をしていきます。
Ubuntu ディスクトップにある □>_ アイコンから端末画面を開き、
yamada@ubuntu-20:~$ mkdir public_html/download
として PDF ダウンロードファイル保存フォルダ download をあらかじめ作成しておきます。
作成済みの方は省略です。
/home/yamada/public_html/download
が作成できました。
次に、sc_sele_pdf-1.py を実行します。
$ python3 public_html/sc_sele_pdf-1.py
として確認します。
実行開始後今回は Chromium-browser(Chrome) 画面は Ubuntu ディスクトップに発生しません。
何事もなく PDF ダウンロードが実行され、ブラウザが終了し End の表示が出れば OK です。
次に、
yamada@ubuntu-20:~$ ls -l public_html/download
でダウンロードしたファイル
/home/yamada/public_html/download/
kyoshoshomei.pdf
を確認します。
ファイル名は kyoshoshomei.pdf となって、二度目以降は上書きされます。

ここまでで、Chromium 画面なしで Selenium PDF ファイルダウンロードができました。
引き続き、Selenium で CSV ファイルをダウンロードしてみます。


  • Selenium で CSV ファイルダウンロード に進む
  • Selenium で PDF ファイルダウンロード に戻る
  • Selenium Google 検索ファイル動作確認 に戻る
  • Selenium で Google 検索開始 に戻る
  • Python Selenium Web 自動操作概要 に戻る
  • 70VPS に戻る