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

如何使用Selenium点击新标签页中打开的PDF的下载图标

如何使用Selenium点击Chrome新标签页中PDF的下载图标

Chrome内置的PDF阅读器界面基于Shadow DOM实现,常规元素定位方式无法直接获取到下载图标,需要逐层穿透Shadow DOM来定位目标元素。以下是实现步骤及代码:

核心实现代码

首先需要实现一个获取Shadow DOM根节点的工具方法:

// 获取Shadow DOM根节点的工具方法
public WebElement getShadowDOM(WebElement parentElement, WebDriver driver) {
    return (WebElement)((JavascriptExecutor)driver).executeScript("return arguments[0].shadowRoot", parentElement);
}

然后通过逐层穿透Shadow DOM定位下载图标并操作:

// 定位最外层PDF阅读器容器
WebElement root = DriverManager.getDriver().findElement(By.id("viewer"));
// 第一层Shadow DOM
WebElement shadowdom1 = getShadowDOM(root, DriverManager.getDriver());
WebElement toolbar = shadowdom1.findElement(By.tagName("viewer-toolbar"));
// 第二层Shadow DOM
WebElement shadowdom2 = getShadowDOM(toolbar, DriverManager.getDriver());
WebElement downloads = shadowdom2.findElement(By.tagName("viewer-download-controls"));
// 第三层Shadow DOM
WebElement shadowdom3 = getShadowDOM(downloads, DriverManager.getDriver());
WebElement crIconbutton = shadowdom3.findElement(By.tagName("cr-icon-button"));
// 第四层Shadow DOM
WebElement shadowdom4 = getShadowDOM(crIconbutton, DriverManager.getDriver());
WebElement downloadIcon = shadowdom4.findElement(By.tagName("iron-icon"));

// 验证下载图标可见后执行点击
Assert.assertTrue(downloadIcon.isDisplayed(), "No download option available");
downloadIcon.click();

说明

Chrome的PDF阅读器组件全部封装在Shadow DOM内部,无法通过常规findElement方法直接访问。必须先获取每一层父元素的Shadow DOM根节点,才能继续定位其中的子元素,这是实现该操作的核心前提。

内容的提问来源于stack exchange,提问作者ajay gawade

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:06:32