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

如何使用Selenium WebDriver(Java)处理新标签页并点击其中的下载按钮

Selenium WebDriver(Java)自动化PDF下载按钮点击方案

步骤1:切换到PDF所在的新标签页

点击CTA后PDF会在新标签打开,首先需要切换窗口句柄:

// 获取所有窗口句柄并转为列表
Set<String> windowHandles = driver.getWindowHandles();
List<String> handleList = new ArrayList<>(windowHandles);
// 切换到最后打开的标签页(即PDF页面)
driver.switchTo().window(handleList.get(handleList.size() - 1));

步骤2:处理PDF下载按钮的两种场景

场景1:Chrome内置PDF阅读器

Chrome内置阅读器的下载按钮属于浏览器原生控件,直接定位稳定性一般,推荐通过浏览器配置直接下载PDF,无需点击按钮:

ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<>();
// 配置PDF直接下载,不打开预览
prefs.put("plugins.always_open_pdf_externally", true);
options.setExperimentalOption("prefs", prefs);
WebDriver driver = new ChromeDriver(options);

如果必须点击按钮,可尝试显式等待后定位元素(选择器需根据实际页面调整):

// 等待下载按钮可点击,示例用CSS选择器匹配title为“下载”的按钮
WebElement downloadBtn = new WebDriverWait(driver, Duration.ofSeconds(10))
        .until(ExpectedConditions.elementToBeClickable(By.cssSelector("button[title='下载']")));
downloadBtn.click();

场景2:第三方PDF控件/内嵌iframe

如果PDF嵌入在iframe中,先切换到iframe再定位按钮:

// 定位PDF所在的iframe(需根据实际页面调整定位方式)
WebElement pdfIframe = driver.findElement(By.tagName("iframe"));
driver.switchTo().frame(pdfIframe);

// 定位下载箭头按钮,示例用XPath匹配aria-label为“下载”的元素
WebElement downloadArrow = driver.findElement(By.xpath("//*[@aria-label='下载']"));
downloadArrow.click();

// 操作完成后切回主文档
driver.switchTo().defaultContent();

关键注意事项

  • 必须使用显式等待(WebDriverWait)替代隐式等待,确保元素加载完成后再操作。
  • 不同浏览器的PDF阅读器控件结构不同,需针对测试浏览器调整定位选择器。
  • 优先使用浏览器配置直接下载的方案,比定位点击按钮更稳定可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:45:36