在Selenium中自动化Chrome打印对话框及验证打印内容的咨询
在Selenium中验证Chrome打印页面内容的方法
方法一:通过Chrome DevTools Protocol(CDP)获取打印预览DOM
Chrome的打印预览在独立渲染上下文运行,你可以借助CDP接口直接获取预览的DOM结构,以此验证标签、表格等内容:
from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless=new") driver = webdriver.Chrome(options=options) driver.get("目标页面URL") # 配置打印参数(复用你已有的PrintOptions逻辑) print_config = { "scaling": 0.8, "printBackground": True } # 获取打印预览的完整DOM结构 dom_result = driver.execute_cdp_cmd("DOM.getDocument", {"depth": -1}) # 解析DOM节点,提取需要验证的内容 # 示例:遍历表格节点验证数据 def traverse_dom(node): if node.get("nodeName") == "TABLE": # 处理表格逻辑,比如提取行、列文本对比预期值 pass for child in node.get("children", []): traverse_dom(child) traverse_dom(dom_result["root"])
方法二:生成PDF后解析内容验证
用CDP生成打印预览的PDF文件,再通过第三方库解析文本和表格,对比预期数据(更贴近实际打印效果):
import pdfplumber import base64 # 通过CDP生成PDF pdf_data = driver.execute_cdp_cmd("Page.printToPDF", print_config) # 保存PDF到本地 with open("print_output.pdf", "wb") as f: f.write(base64.b64decode(pdf_data["data"])) # 解析PDF内容 with pdfplumber.open("print_output.pdf") as pdf: for page in pdf.pages: # 验证标签文本 page_text = page.extract_text() assert "预期标签内容" in page_text # 验证表格数据 tables = page.extract_tables() if tables: # 对比表格表头或单元格内容 assert tables[0][0][0] == "预期表头文本" assert tables[0][1][1] == "预期单元格内容"
方法三:非无头模式下操作打印预览窗口
如果使用非无头模式,打印预览会以新标签页打开,直接切换标签页后用Selenium常规定位方法验证:
from selenium.webdriver.common.by import By # 触发页面打印操作 driver.find_element(By.ID, "print-button").click() # 切换到打印预览标签页 driver.switch_to.window(driver.window_handles[-1]) # 验证标签内容 label_text = driver.find_element(By.CSS_SELECTOR, ".print-label").text assert label_text == "预期标签文本" # 验证表格行数 table_rows = driver.find_elements(By.CSS_SELECTOR, ".print-table tr") assert len(table_rows) == 6 # 预期行数
内容的提问来源于stack exchange,提问作者rraghad
相关产品推荐
相关产品推荐

