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

如何使用Selenium提取并下载设置loading='lazy'属性的懒加载图片?

错误原因
  • 新标签页上下文未切换:调用window.open打开新标签页后,driver默认仍绑定原标签页,未切换到新打开的页面,在原页面查找目标元素自然会触发NoSuchElementException
  • WebDriverWait初始化顺序错误:代码中先调用wait.until判断页面加载完成,之后才实例化wait对象,会先触发空指针异常,影响后续代码执行
  • 等待条件逻辑错误:原有代码最后一行设置的是等待目标元素不可见,后续再查找元素必然无法找到
  • 页面滚动后未预留渲染时间:执行滚动到底部的JS后,页面懒加载的元素需要渲染时间,没有等待直接查找元素也可能触发找不到的错误
修复后可运行代码
// 先初始化WebDriverWait,顺序不能乱
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
JavascriptExecutor js = (JavascriptExecutor) driver;

// 打开新标签页
((JavascriptExecutor)driver).executeScript("window.open('https://www.lambdatest.com/selenium-automation/','_blank');");

// 获取所有标签页句柄,切换到新打开的第二个标签页
ArrayList<String> tabs = new ArrayList<>(driver.getWindowHandles());
driver.switchTo().window(tabs.get(1));

// 等待页面加载完成
wait.until(webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete"));

// 滚动到页面底部
js.executeScript("window.scrollTo(0, document.body.scrollHeight)");

// 等待目标img元素可见后再查找
By Image=By.xpath("//img[@title='Jenkins']");
WebElement ImageElemnt = wait.until(ExpectedConditions.visibilityOfElementLocated(Image));

// 提取src属性
String src = ImageElemnt.getAttribute("src");
System.out.println(src);

// 如果后续不需要操作新标签页可以关闭切回原标签页
// driver.close();
// driver.switchTo().window(tabs.get(0));
额外注意事项
  • 如果目标元素不是<img>标签而是内嵌的<svg>标签,需要调整xpath定位规则,直接定位<svg>节点后提取对应属性即可
  • 如果元素在iframe内,需要先切换到对应iframe上下文再查找元素

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:36:00