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 ファイルをダウンロードしてみます。