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

使用Python+Selenium下载iframe内嵌PDF弹窗文件遇阻

解决Selenium点击PDF弹窗“Abrir”按钮的问题

1. 先切换到PDF所在的iframe

PDF弹窗大概率嵌套在iframe里,必须先切换到对应iframe才能操作内部元素:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

# 替换成实际的iframe定位规则(比如id、xpath),等待iframe加载完成
target_iframe = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.XPATH, "//iframe[contains(@src, 'pdf')]"))
)
driver.switch_to.frame(target_iframe)

2. 等待按钮可点击后再操作

不要直接定位元素就点击,必须等按钮进入可交互状态:

# 用文本定位“Abrir”按钮,等待可点击
abrir_button = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.XPATH, "//*[text()='Abrir']"))
)
abrir_button.click()

3. 处理shadow DOM的情况

如果按钮嵌套在shadow DOM里,需要先获取shadow根节点再定位:

# 先定位shadow DOM的宿主元素
shadow_host = driver.find_element(By.CSS_SELECTOR, "your-shadow-host-selector")
shadow_root = shadow_host.shadow_root
# 在shadow根节点内找按钮
abrir_button = shadow_root.find_element(By.XPATH, "//*[text()='Abrir']")
abrir_button.click()

4. 键盘快捷键替代点击(备选方案)

如果按钮点击始终失效,试试模拟回车触发:

from selenium.webdriver.common.keys import Keys

abrir_button.send_keys(Keys.ENTER)

5. 直接提取PDF链接下载(更高效)

绕开按钮点击的麻烦,直接获取PDF的真实链接下载:

import requests

# 从iframe的src属性提取PDF链接
pdf_url = target_iframe.get_attribute("src")
# 复用Selenium的登录cookie,避免权限问题
session = requests.Session()
for cookie in driver.get_cookies():
    session.cookies.set(cookie['name'], cookie['value'])

# 下载PDF
with open("target.pdf", "wb") as f:
    f.write(session.get(pdf_url).content)

内容的提问来源于stack exchange,提问作者Sérgio De Brito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:43:15