LoginSignup
6

More than 3 years have passed since last update.

SeleniumとPythonを用いて複数のウェブサイトをPDF保存

Last updated at Posted at 2019-06-07

1) ChromeDriverのダウンロード

  1. 自分の使っているGoogle ChromeでブラウザのツールバーにあるChromeメニュー(点が縦に3つ並んでいるもの)をクリックします。[ヘルプ]から[Google Chromeについて]を選択し、バージョンを確認します。
  2. 同じバージョンのChromeDriverを http://chromedriver.chromium.org/downloads からダウンロードします。
    • (注) ここで最新版を選んでしまうとサポートされていないことがあるので、自分が使っているものと同じものを選んでおくのが無難です。筆者の場合、当時(2019/5/27)バージョン75を最初にインストールしてしまって失敗しました。
    • (注) 他の方法はPython + Selenium で Chrome の自動操作を一通りが参考になります。今回はバイナリファイルをPythonプログラムと同じフォルダにおいていますが、そうしない方法もあるようです。

2) seleniumのインストール

pip install seleniumで導入できます。

3) コード

rpa.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
import os
from selenium import webdriver

# アドレスの設定
addrs=[
'https://example.com/page1.html',
'https://example.com/page2.html',
'https://example.com/page3.html'
]

# 実際に実行する関数と補助関数
def dl_pdf(addr):
    driver.get(addr)
    driver.execute_script('return window.print()')

def main(addrs):
    for addr in addrs:
        dl_pdf(addr)


# Google Chrome Driverの設定
chopt=webdriver.ChromeOptions()
appState = {
    "recentDestinations": [
        {
            "id": "Save as PDF",
            "origin": "local",
            "account":""
        }
    ],
    "selectedDestinationId": "Save as PDF",
    "version": 2
}

prefs = {'printing.print_preview_sticky_settings.appState': 
json.dumps(appState)}
chopt.add_experimental_option('prefs', prefs)
chopt.add_argument('--kiosk-printing')
driver = webdriver.Chrome(executable_path='./chromedriver',options=chopt)

# 実行部
if __name__ == '__main__':
    main(addrs)

フォルダ内の構造

.
├── chromedriver
└── rpa.py

python rpa.pyでこのコードを実行すると、デフォルトのダウンロード先(筆者の場合~/Downloads)にPDFファイルが保存されます。ダウンロード先を変更することもこのコードを書き換えればできるはずです。

ハマったところ・重要なところ

  1. account:""が印刷先をPDFに設定するために必須です。この設定が必要なのを見つけるのに随分時間を空費しました。
  2. chopt.add_argument('--kiosk-printing')は印刷画面が開いたときに印刷ボタンを自動で押させる設定です。

拡張

ghostscriptを用いると、作成したPDFをかんたんに結合できます。

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf input1.pdf input2.pdf

のようなコマンドです。コマンドラインでpdfを連結する方法を参考にしました。

4) 注意点

有料ジャーナルなどでこのプログラムを使用してはいけません。すぐ止められてしまいます。このプログラムを使用して起きた損害については一切責任を負いません。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6