colabの環境下でseleniumを用いて、印刷レイアウトからwebページをpdf保存した場合、どのようにすればpdfファイルを取得できますでしょうか。
下記のサイトを参考にseleniumで印刷レイアウトを表示させ、webページをpdf保存するコードを書きました。
https://degitalization.hatenablog.jp/entry/2021/03/13/102805
しかしcolabですと、pdfファイルが見つからず、どこに保存されているのか、そもそも保存すらされているのかがわからない状態です。
一応ですが環境は
google colab
Python 3.7.13
windows10(ローカル)
でございます。
以下に私が書きましたサンプルコードを記載いたします。
python
1! pip install selenium 2from selenium import webdriver 3from selenium.webdriver.chrome.options import Options 4from selenium.webdriver.support.ui import WebDriverWait 5from selenium.webdriver.support import expected_conditions as EC 6 7!apt-get update 8!apt install chromium-chromedriver 9!cp /usr/lib/chromium-browser/chromedriver /usr/bin 10options = webdriver.ChromeOptions() 11options.add_argument('--headless') 12options.add_argument('--no-sandbox') 13options.add_argument('--disable-dev-shm-usage') 14browser = webdriver.Chrome('chromedriver', options = options) 15browser.implicitly_wait(3) 16 17import json 18import time 19 20chromeOpt = webdriver.ChromeOptions() 21appState = { 22 'recentDestinations': [ 23 { 24 'id': 'Save as PDF', 25 'origin': 'local', 26 'acount':'' 27 } 28 ], 29 'selectedDestinationId': 'Save as PDF', 30 'version': 2, 31 'isLandScapeEnabled': True, 32 'pageSize': 'A4', 33 'isHeaderFooterEnabled': False, 34 'isCssBackgroundEnabled': True 35} 36 37prefs = { 38 'printing.print_preview_sticky_setting.appState': json.dumps(appState), 39 'download.default_directory': '/content' 40} 41 42chromeOpt.add_experimental_option('prefs', prefs) 43chromeOpt.add_argument('--kiosk-printing') 44 45URL = 'https://tabelog.com/tokyo/' 46browser = webdriver.Chrome('chromedriver', options = options) 47browser.implicitly_wait(10) 48browser.get(URL) 49WebDriverWait(browser, 15).until(EC.presence_of_all_elements_located) 50pdf = browser.execute_script('return window.print()') 51time.sleep(10) 52browser.quit()
色々とpdf保存できなかった理由を調べてみますと
ヘッドレスモードで下記の処理であるseleniumnで印刷ダイアログを閉じるという処理ができないようです。
python
1chromeOpt.add_argument('--kiosk-printing')
またそれならと、ヘッドレスモードにしないでchromeを使用しようとしましたが、colabではヘッドレスモード以外は使用できないそうです。
つまりseleniumで印刷ダイアログからpdf保存するにはヘッドレスモードを解除しなくてはいけないが、colabでchromeを扱う以上、ヘッドレスモードは解除できず、結果としてpdf保存ができないということになってしまいました。
さらにサンプルコードの中であいまいにコードを書いた部分が以下の保存先の部分です。
colabの場合どのように保存先を示していいか分からず、とりあえずという感じで書いてしまいました。
python
1'download.default_directory': '/content'
ローカル環境でしたらダウンロードフォルダなど任意の場所を示すと思うのですが、
colabにおいて、基本的に取得したファイルが保存されるcontentを指定してみました。
長文になってしまい、分かりづらい点も多々あったかとは思うのですが、
教えて頂けますと幸いです。
追記 2022/09/14 22:30
colabを使用したい理由として、単純なことなのですが基本的に私のpythonの環境がcolabだからです。
jupyter labなどももちろん使えるようにはしておりますが、クラウドの便利さからcolabを選択しております。
ですので、多少コードを工夫してでもcolabで統一してできないかというのを模索しております。
colabではどうしても手段がないのであれば、jupyter labなどのローカル環境で試していこうと思っております。
あなたの回答
tips
プレビュー