You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python Selenium访问pdf-viewer实现缩放及滚动操作

Selenium操作Chrome内置<pdf-viewer>解决方案

核心结论

  1. 不需要像iframe一样切换上下文,<pdf-viewer>属于Chrome内置自定义元素,内部DOM封装在Shadow DOM中,通过执行JS即可访问内部元素
  2. 完全可以实现放大、缩小、滚动三类操作,适配你当前使用的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:09:04