質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

3回答

6537閲覧

python3+seleniumを使用し、Chromeで表示中のwebページをPDF保存する

dropkix

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2020/05/14 04:34

編集2020/05/14 04:36

前提・実現したいこと

seleniumを使い、chromeでwebページを自動でPDFとして印刷、保存しようとしています。
具体的なステップを記述しますと、

1.指定フォルダの中にあるxlsxファイルを開き、指定したセルの値を読み込み、その値と同名のフォルダを作成
2.chromeを起動し、google.comを開く
3.検索フォームに1で読み込んだ値を入力し、検索を実行
4.検索結果の1番目をクリックし、ページを開く
5.開いたページをPDFとして印刷し、1で作成したフォルダに保存

となります。実行するとエラーメッセージが表示されることもありません。しかし、プロセスが最後まで進んだ際に保存ダイアログでファイル名が空白となり保存が実行されません。また、保存先として開かれたフォルダは指定したフォルダではなく、デフォルトのダウンロードフォルダです。

プログラミング自体ほぼ初めてであり、知識・スキル不足により自身での解決に至りませんでした。ご助力をお願い致します。

該当のソースコード

python3

1import os 2import openpyxl 3from selenium import webdriver 4 5 6# Excelファイルのロード(読み取り専用) 7excel_path='C:/xlsxファイルのアドレス' 8wb = openpyxl.load_workbook(filename=excel_path, read_only=True) 9 10ws = wb['Sheet1'] #シートのロード 11 12folder_name1 = str(ws['B3'].value) #セルB3の値を読み込み、変数に格納 13folder_name2 = str(ws['C3'].value) #セルC3の値を読み込み、変数に格納 14 15os.chdir('C:/作業ディレクトリ') #作業用ディレクトリへの移動 16 17if not os.path.exists(folder_name1): 18 os.makedirs(folder_name1) #親フォルダの作成 19 20os.chdir(folder_name1) #親フォルダ内への移動 21 22if not os.path.exists(folder_name2): 23 os.makedirs(folder_name2) #子フォルダを作成する 24 25os.chdir(folder_name2) #子フォルダ内への移動 26c_path = os.getcwd() #カレントディレクトリの取得 27 28driver = webdriver.Chrome() #chrome用webドライバーの読み込み。 29driver.get('https://www.google.com/?hl=ja') #googleを開く 30 31search = driver.find_element_by_name('q') #検索ボックスの指定 32search.send_keys(folder_name2) #検索ワードに変数を指定 33search.submit() #検索実行 34 35element = driver.find_element_by_class_name("LC20lb") #検索結果の要素を指定 36element.click() #クリック実行 37driver.implicitly_wait(3) #3秒待機 38 39options = webdriver.ChromeOptions() 40 41prefs = {"download.default_directory" : "c_path"} #保存先フォルダをカレントディレクトリに設定 42options.add_experimental_option("prefs",prefs) 43options.add_argument('--kiosk-printing') 44 45driver = webdriver.Chrome(options=options) 46 47driver.execute_script('window.print();') 48 49os.chdir('C:/作業ディレクトリ') #作業ディレクトリへ戻る

環境

windows10 64bit
python3.8.2
pycharm2020.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Chromeとドライバーのバージョンを同じにしていますか?

投稿2020/05/24 07:47

ajatan

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Selenium WebDriverはchromeに入れていますか?

投稿2020/05/24 07:44

ajatan

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

python

1options = webdriver.ChromeOptions() 2 3prefs = {"download.default_directory" : "c_path"} #保存先フォルダをカレントディレクトリに設定 4options.add_experimental_option("prefs",prefs) 5options.add_argument('--kiosk-printing') 6 7driver = webdriver.Chrome(options=options)

python

1c_path = os.getcwd() #カレントディレクトリの取得

の直後に持ってきてください。
そして、

python

1driver = webdriver.Chrome() #chrome用webドライバーの読み込み。

を削除してください。

追記

以下ならどうでしょうか。

python

1import os 2import openpyxl 3from selenium import webdriver 4from selenium.webdriver.chrome.options import Options 5from time import sleep 6 7 8# Excelファイルのロード(読み取り専用) 9excel_path='C:/xlsxファイルのアドレス' 10 11 〜中略〜 12 13os.chdir(folder_name2) #子フォルダ内への移動 14c_path = os.getcwd() #カレントディレクトリの取得 15 16options = Options() 17options.add_experimental_option("prefs", { 18 "download.default_directory": "~/Downloads" 19}) 20options.add_argument('--kiosk-printing') 21 22driver = webdriver.Chrome(options=options) 23driver.get('https://www.google.com/?hl=ja') #googleを開く 24 25search = driver.find_element_by_name('q') #検索ボックスの指定 26search.send_keys(folder_name2) #検索ワードに変数を指定 27search.submit() #検索実行 28sleep(5) 29 30element = driver.find_element_by_class_name("LC20lb") #検索結果の要素を指定 31element.click() #クリック実行 32sleep(3) #3秒待機 33 34driver.execute_script('window.print();') 35sleep(10) 36 37os.chdir('C:/作業ディレクトリ') #作業ディレクトリへ戻る

投稿2020/05/14 07:14

編集2020/05/19 13:23
shirai

総合スコア1290

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dropkix

2020/05/14 08:17

回答ありがとうございます。回答通りにコードを変更したのですが、同じ結果となりました。
shirai

2020/05/14 15:14

prefs = {"download.default_directory" : "c_path"} とありますが、変数c_pathに格納された文字列ではなく、 c_pathという文字列そのものになってしまっていませんか?
dropkix

2020/05/15 00:18

prefs = {"download.default_directory" : c_path} としましたが、やはり保存ダイアログで表示されるフォルダはデフォルトのダウンロードフォルダでした。
shirai

2020/05/15 13:01

となるとパスの書き方が誤っている可能性がありますね。 指定したフォルダのパスを/ではなく¥¥にするとどうなりますか?
shirai

2020/05/15 13:02

C:/hoge/fuga なら C:¥¥hoge¥¥fuga という感じです。
dropkix

2020/05/18 04:37

指定したフォルダのパスとは、 os.chdir('C:/作業ディレクトリ') のことでしょうか?それでしたら、folder_name1とfolder_name2で名前を指定したフォルダが作成されているので、問題はないはずです。 念のため、 prefs = {"download.default_directory" : "c_path"} の部分を以下のように書き換え、保存先フォルダに変数を用いないようにして実験してみました。 prefs = {"download.default_directory" : "C:\Users\試験用フォルダのパス"} 結果はやはり同じで、指定したフォルダが開かれず、保存しようとしているファイル名も空白となっています。
shirai

2020/05/19 13:03

なるほど! だとしたらデフォルトのフォルダにDLした後に保存したかったフォルダに移動させた方が早そうですね。 これはSeleniumを使わずにosだけでできるはずです。 https://note.nkmk.me/python-shutil-move/ こんな感じで!
shirai

2020/05/19 13:09

すみません元々DL自体がうまく行ってなかったですね。。。
shirai

2020/05/19 13:23

追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問