Python Seleniumにてページ遷移と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 = False17options = Options()18options.add_argument('--kiosk-printing')19 20download = '/Users/me/Documents/pdfs' #保存先21 22target_url ='https://~~~?page=1' #アクセスするURL23 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 = True61 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 = True98 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になっています。

コメントを投稿

0 コメント