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

Selenium切换iframe后getPageSource返回空白HTML,无法定位子iframe

问题分析与解决方案

核心问题点

  • ID不匹配:页面里的iframe ID是iframe01和iframe02,但你的代码里用的是iframe1和iframe2,这直接导致后续定位元素失败,切换后的iframe也不是目标对象。
  • 未等待iframe加载:切换iframe后,内部页面(page2.html)还没加载完成就获取pageSource,自然得到空body;后续定位iframe02时,页面还没渲染出该元素,所以找不到。
  • HTML拼写错误:你的示例HTML里把<body>写成了<doby>,如果实际页面也是如此,浏览器解析会出问题,iframe无法正常加载内容。

修正后的代码

// 初始化等待器,设置10秒超时
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));

// 等待iframe01可用并直接切换进去,无需单独定位
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("iframe01")));

// 此时page2.html已加载,可正常获取源码
String test1 = driver.getPageSource();

// 继续等待iframe02可用并切换
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("iframe02")));

// 获取page3.html的源码
String test2 = driver.getPageSource();

// 若需回到外层主页面,执行以下代码
driver.switchTo().defaultContent();

额外说明

  • frameToBeAvailableAndSwitchToIt方法会自动等待iframe加载完成并完成切换,比先定位元素再切换的方式更稳定。
  • 如果iframe内的元素是动态渲染的,可额外添加等待逻辑,比如等待iframe内某个关键元素可见:
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("某个内部元素ID")));
    
  • 务必修正实际页面中的<body>拼写错误,否则浏览器无法正确解析页面结构,iframe加载会异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:25:10