如何使用Python Selenium访问pdf-viewer实现缩放及滚动操作
Selenium操作Chrome内置
<pdf-viewer>解决方案 核心结论
- 不需要像iframe一样切换上下文,
<pdf-viewer>属于Chrome内置自定义元素,内部DOM封装在Shadow DOM中,通过执行JS即可访问内部元素 - 完全可以实现放大、缩小、滚动三类操作,适配你当前使用的Selenium3.141、Chrome94、Python3.7版本
具体实现代码
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 import time # 初始化Chrome driver driver = webdriver.Chrome(executable_path="你的chromedriver.exe本地路径") driver.maximize_window() wait = WebDriverWait(driver, 15) # 访问目标PDF页面 test_url = "https://www.equibase.com/premium/eqbPDFChartPlus.cfm?RACE=1&BorP=P&TID=ALB&CTRY=USA&DT=06/17/2002&DAY=D&STYLE=EQB" driver.get(test_url) # 等待pdf-viewer元素加载完成 pdf_viewer = wait.until(EC.presence_of_element_located((By.ID, "viewer"))) # 1. 放大操作 driver.execute_script(''' const viewer = arguments[0]; const shadowRoot = viewer.shadowRoot; // 适配94版本Chrome的PDF放大按钮选择器 const zoomInBtn = shadowRoot.querySelector('#zoomIn'); zoomInBtn.click(); ''', pdf_viewer) time.sleep(1) # 2. 缩小操作 driver.execute_script(''' const viewer = arguments[0]; const shadowRoot = viewer.shadowRoot; const zoomOutBtn = shadowRoot.querySelector('#zoomOut'); zoomOutBtn.click(); ''', pdf_viewer) time.sleep(1) # 3. 向下滚动500像素操作 driver.execute_script(''' const viewer = arguments[0]; const shadowRoot = viewer.shadowRoot; const contentContainer = shadowRoot.querySelector('#content'); contentContainer.scrollTop += 500; ''', pdf_viewer) # 操作完成后关闭driver # driver.quit()
注意事项
- 不同Chrome版本的PDF阅读器内部元素ID可能存在差异,以上选择器仅适配你使用的94版本Chrome/Chromedriver
- 如果需要自定义缩放比例,可以直接修改
shadowRoot.querySelector('#zoomSelect').value属性设置指定缩放值 - 也可以通过Selenium的ActionChains模拟滚轮操作,实现更灵活的滚动效果
内容的提问来源于stack exchange,提问作者Mason
相关产品推荐
相关产品推荐

