Selenium ManagerでWebDriverを自動ダウンロード!HPをPDFとして毎日保存する方法
はじめに
ウェブサイトが毎日更新される場合、その情報を自動的に保存しておきたいことがあるかもしれません。従来、WebDriverを手動でダウンロードし、設定する必要がありましたが、Selenium 4.6以降で導入されたSelenium Managerを使えば、この作業が自動化されます。さらに、今回はheadlessモードが効かない問題を解決するための工夫として、ブラウザウィンドウを画面外に飛ばす方法も紹介します。
必要な準備
まず、Seleniumを利用してウェブページをPDFとして保存するための準備が必要です。ChromeDriverを自動的にダウンロードして使うには、Selenium Managerを活用しましょう。
- Seleniumライブラリのインストール
Selenium Managerを使うには、selenium
ライブラリをインストールしておきます。以下のコマンドを使用してください。pip install selenium
- Selenium ManagerによるWebDriverの自動ダウンロード
Selenium 4.6以降では、WebDriverのパスを手動で指定する必要がなく、Selenium Managerが自動で適切なWebDriverを取得してくれます。このため、従来の手動設定を省略でき、コードがさらに簡潔になります。
ソースコード
#!/usr/bin/env python # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.chrome.options import Options import time from pathlib import Path output_dir = Path(__file__).resolve().parent # Chromeオプションの設定 chrome_options = Options() #chrome_options.add_argument('--headless') # ヘッドレスモード(GUIなしで実行) chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--no-sandbox') # 最初からウィンドウの位置を画面外に設定 chrome_options.add_argument("--window-position=-2000,0") # x=-2000で画面外に移動 chrome_options.add_argument("--window-size=800,600") # ウィンドウサイズを指定 # PDFで保存するためのオプション設定 chrome_options.add_experimental_option('prefs', { "printing.print_preview_sticky_settings.appState": '{"recentDestinations":[{"id":"Save as PDF","origin":"local","account":"","capabilities":{}}],"selectedDestinationId":"Save as PDF","version":2}', "savefile.default_directory": str(output_dir) # PDF保存先のディレクトリ }) chrome_options.add_argument('--kiosk-printing') # 自動的に保存 # Selenium Managerを使用してChromeDriverを自動ダウンロード driver = webdriver.Chrome(options=chrome_options) # 対象のURLを開く driver.get("https://www.yahoo.co.jp") # 印刷ダイアログをトリガーしてPDFとして保存 driver.execute_script('window.print();') # 処理完了のため少し待つ(必要に応じて調整) time.sleep(10) # ドライバを閉じる driver.quit()
詳細な解説
- Selenium Managerの導入
従来は、ChromeDriverを手動でダウンロードして、それをパス指定する必要がありました。しかし、このコードではwebdriver.Chrome(options=chrome_options)
という形でSelenium Managerを利用しているため、WebDriverの自動取得が行われます。 - headlessモードが効かない問題
実際には、headlessモードが機能しないケースが発生することがあります。特にPDF出力に関しては、headlessモードが正しく動作しないことが報告されています。そこで、このスクリプトではheadlessモードを無効にし、代わりに--window-position=-2000,0
を使って、ブラウザウィンドウを画面外に飛ばすことで、見た目上の問題を解決しています。 - PDF保存の自動化
このスクリプトは--kiosk-printing
オプションを使うことで、ユーザーの操作を必要とせずにPDFを自動保存します。また、保存先のディレクトリも指定することで、PDFファイルが決まった場所に保存されるように設定しています。
まとめ
この方法を使うと、Selenium Managerの導入によってWebDriverの自動ダウンロードが可能になり、headlessモードの問題を回避してウェブページをPDFとして自動保存することができます。もし、毎日変わるウェブページの情報を効率的に収集したい場合は、ぜひこの手法を試してみてください。
Commnts