如何用Selenium和Python遍历下载多份PDF?代码报错求助
解决Selenium批量下载PDF的报错问题
嘿,我看到你刚接触Selenium和Python,在批量下载PDF时碰了壁,咱们来拆解下问题根源,再给你两个可行的解决办法~
问题出在哪?
你代码里的核心错误在于:driver.get()这个方法只是让Chrome加载指定的URL,它不会返回任何响应对象(实际返回的是None)。而iter_content()是requests库中HTTP响应对象的方法,你把None赋值给page后调用这个方法,自然会报错啦。
解决方案一:用requests直接下载(更高效)
既然你要下载的是直接可访问的PDF链接,完全不需要启动浏览器——requests库就能搞定,速度更快、资源占用更少。代码示例:
import requests # 自定义请求头,避免被网站识别为爬虫(可选但推荐) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" } cusip = ['abc123','def456','ghi789'] for a in cusip: pdf_url = f"http://mylink={a}.pdf" try: # 发送请求获取PDF内容 response = requests.get(pdf_url, headers=headers) response.raise_for_status() # 如果请求失败,抛出异常 # 写入本地文件 with open(f"{a}.pdf", 'wb') as f: f.write(response.content) print(f"{a}.pdf 下载成功!") except Exception as e: print(f"下载{a}失败:{str(e)}")
解决方案二:用Selenium配置自动下载(适合需要浏览器渲染的场景)
如果你的PDF链接需要先登录、或者依赖浏览器动态渲染才能访问,那还是得用Selenium。这时候要配置Chrome的下载偏好,让它自动把PDF保存到指定文件夹,不用手动处理文件流:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import os # 设置PDF保存的文件夹 download_folder = os.path.join(os.getcwd(), "pdf_files") # 如果文件夹不存在就创建 os.makedirs(download_folder, exist_ok=True) # 配置Chrome浏览器选项 chrome_options = Options() chrome_options.add_experimental_option("prefs", { "download.default_directory": download_folder, # 指定下载路径 "download.prompt_for_download": False, # 不弹出下载确认框 "download.directory_upgrade": True, # 允许更新下载路径 "plugins.always_open_pdf_externally": True # 直接下载PDF,不打开预览 }) # 启动Chrome浏览器 driver = webdriver.Chrome(options=chrome_options) cusip = ['abc123','def456','ghi789'] for a in cusip: pdf_url = f"http://mylink={a}.pdf" driver.get(pdf_url) # 所有文件下载完成后关闭浏览器 driver.quit() print(f"所有PDF已保存到:{download_folder}")
内容的提问来源于stack exchange,提问作者Shashi Shankar Singh
相关产品推荐
相关产品推荐

