実現したいこと
ここに実現したいことを箇条書きで書いてください。
- 複数ページあるサイトの1ページ目を表示
- 最後のページを表示し、ページ数を取得
- 全ページの範囲でループ
- ループ内で印刷>次のページへ
- 取得したPDFを1枚のPDFへ結合し、指定のフォルダへ保存
- 取得したPDFを削除
前提
Python Seleniumを使用して、上記工程を自動化しております。
ループ内でPDFを取得する過程において、指定フォルダに101枚のPDFが保存されると、
ページ遷移と印刷ダイアログは表示されるのですが、以降のPDFが保存されなくなります。
page
page(1)
page(2)
...
page(100)
というPDFまでが保存され、最後の結合でもページ数101枚のPDFが作成されます。
エラーは表示されず、処理終了となります。どこか不明な場所へ保存されているのではないかと思われます。
初心者でして、作法などあまり分かっておらず、お手柔らかにお願いできますと幸いです。
該当のソースコード
Python
1from selenium import webdriver 2from selenium.webdriver.common.by import By 3from selenium.webdriver.support import expected_conditions as EC 4from selenium.webdriver.chrome.options import Options 5import time 6import chromedriver_binary 7import pickle 8import json 9import os 10import random 11import pypdf 12import glob 13import shutil 14 15 16error_flg = False 17options = Options() 18options.add_argument('--kiosk-printing') 19 20download = '/Users/me/Documents/pdfs' #保存先 21 22target_url ='https://~~~?page=1' #アクセスするURL 23 24#プリンタを自動で閉じる 25appState = { 26 "recentDestinations": [ 27 { 28 "id": "Save as PDF", 29 "origin": "local", 30 "account": "" 31 } 32 ], 33 "selectedDestinationId": "Save as PDF", 34 "version": 2, 35 "pageSize": 'A4' 36} 37 38options.add_experimental_option("prefs", { 39 "printing.print_preview_sticky_settings.appState": 40 json.dumps(appState), 41 "savefile.default_directory" : download }) 42 43driver = webdriver.Chrome(options=options) 44 45# 取得済みクッキーの読み込み・書き込み 46if error_flg is False: 47 try: 48 driver.get(target_url) 49 driver.delete_all_cookies() 50 cookies = pickle.load(open("cookies.pkl", "rb")) 51 for cookie in cookies: 52 driver.add_cookie(cookie) 53 # URLにアクセス 54 driver.get(target_url) 55 56 time.sleep(1) 57 58 except Exception: 59 print('取得済みクッキーの読み込み・書き込み時にエラーが発生しました。') 60 error_flg = True 61 62if error_flg is False: 63 try: 64 #タイトルの取得 65 pdf_title = driver.find_element(by=By.CLASS_NAME,value='Info__title').text 66 #最後のページへ移動 67 move_tail = driver.find_element(by=By.ID,value="move-tail") 68 move_tail.click() 69 70 #最後のページの数値を取得 71 cur_url = driver.current_url 72 target = 'page=' 73 74 tail_idx = cur_url.find(target) 75 tail_number = int(cur_url[tail_idx+len(target):]) 76 77 num = tail_number - 1 #処理する回数 78 79 move_head = driver.find_element(by=By.ID,value="move-top") 80 move_head.click() 81 82 for _ in range(num): 83 button = driver.find_element(by=By.ID,value='print') 84 button.click() #印刷 85 86 time.sleep(1) 87 88 next = driver.find_element(by=By.ID,value="move-next") 89 next.click() #次のページへ 90 91 time.sleep(1) 92 93 driver.close() 94 95 except Exception: 96 print('PDF化中にエラーが発生しました。') 97 error_flg = True 98 99if error_flg is False: 100 try: 101 #PDFを結合 102 dir_path = "/Users/fukushimashun/Documents/pdfs/" 103 104 def merge_pdf_in_dir(dir_path, dst_path): 105 106 l = glob.glob(os.path.join(dir_path, '*.pdf')) 107 l.sort() 108 109 merger = pypdf.PdfMerger() 110 for p in l: 111 merger.append(p) 112 113 merger.write(dst_path) 114 merger.close() 115 116 merge_pdf_in_dir('/Users/me/Documents/pdfs', f'/Users/me/Documents/outputs/{pdf_title}.pdf') 117 118 #ファイル削除 119 target_dir = '/Users/me/Documents/pdfs' 120 121 shutil.rmtree(target_dir) 122 os.mkdir(target_dir) 123 124 except Exception: 125 print('PDF結合処理中にエラーが発生しました。') 126 error_flg = True
試したこと
chromeの更新とdriver再ダウンロード
補足情報(FW/ツールのバージョンなど)
chromeは118.0.5993.117
chrome driverは118.0.5993.70になっています。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/10/31 16:50
2023/10/31 23:56 編集
2023/11/07 02:27
2023/11/07 02:41