使用WebBot的Python应用如何触发Chrome PDF阅读器的下载功能?
可行的PDF下载方案
方案1:模拟点击Chrome PDF阅读器的下载按钮
Chrome内置PDF阅读器的下载按钮有固定DOM选择器,你可以通过WebBot或Selenium的元素定位功能直接触发点击:
- 等待页面加载完成后,用CSS选择器定位按钮:
cr-icon-button#download - 或用XPath定位:
//*[@id="download"] - 示例代码(基于Selenium,WebBot操作逻辑类似):
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome() driver.get("https://www.website.com/generatePDF") # 等待下载按钮加载完成并执行点击 download_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.CSS_SELECTOR, 'cr-icon-button#download')) ) download_btn.click()
注意:如果PDF阅读器被嵌套在iframe中,需要先切换到对应iframe再定位元素。
方案2:拦截网络请求捕获PDF数据流
PDF是流式传输的,浏览器会向后端发起请求获取原始数据,你可以通过浏览器DevTools协议(CDP)拦截响应并保存:
- 用Selenium配合CDP监听
Network.responseReceived事件,筛选出PDF类型的响应 - 调用
Network.getResponseBody获取响应内容,写入本地文件
示例代码:
from selenium import webdriver import base64 driver = webdriver.Chrome() # 开启网络监听 driver.execute_cdp_cmd('Network.enable', {}) def save_pdf(event): response = event.get('response') if response and response.get('contentType') == 'application/pdf': # 获取响应体内容 body_data = driver.execute_cdp_cmd('Network.getResponseBody', {'requestId': event['requestId']}) # 写入本地文件 with open('downloaded.pdf', 'wb') as f: if body_data['base64Encoded']: f.write(base64.b64decode(body_data['body'])) else: f.write(body_data['body'].encode('utf-8')) # 绑定监听事件 driver.add_cdp_listener('Network.responseReceived', save_pdf) driver.get("https://www.website.com/generatePDF")
方案3:修改Chrome启动参数,强制直接下载PDF
通过修改Chrome启动参数,跳过内置阅读器,让浏览器自动下载PDF:
- 添加
--pdfjs.disabled=true禁用内置PDF阅读器,同时配置默认下载目录
示例代码:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() # 禁用内置PDF阅读器,触发自动下载 options.add_argument('--pdfjs.disabled=true') # 配置下载目录及自动下载选项 options.add_experimental_option('prefs', { 'download.default_directory': '/你的本地保存路径', 'download.prompt_for_download': False, 'download.directory_upgrade': True }) driver = webdriver.Chrome(options=options) driver.get("https://www.website.com/generatePDF")
导航到目标URL后,浏览器会自动将PDF下载到指定目录,无需手动操作。
内容的提问来源于stack exchange,提问作者Jason Orman
相关产品推荐
相关产品推荐

