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

Selenium中find_elements如何高效批量获取元素innerHTML属性

问题根因
  • find_elements() 返回值是WebElement组成的Python列表,列表对象本身没有get_attribute()方法,直接链式调用必然报错。只有单个WebElement实例可以调用get_attribute()、.text这类属性和方法。
  • 逐元素遍历取值慢的核心原因:每一次读取元素属性、文本的操作,都会单独发起一次Selenium客户端到浏览器驱动的HTTP请求,260个元素对应260次独立IO请求,耗时全在网络通信上,和Python循环本身的性能没有关系。
最高效实现方案

直接通过execute_script注入原生JavaScript,在浏览器进程内一次性完成元素匹配、内容提取的全流程,全程仅产生1次客户端到驱动的通信,性能和直接调用find_elements()拉取元素引用基本持平,比逐元素遍历快3个数量级左右。

代码实现:

target_class_name = "roulette-history-item__value-textsiwxWvFlm3ohr_UMS23f"
# 提取元素可见文本,需要innerHTML的话把下方的textContent替换成innerHTML即可
values = driver.execute_script("""
const nodeList = document.getElementsByClassName(arguments[0]);
return Array.from(nodeList).map(item => item.textContent.trim());
""", target_class_name)

使用说明

  • 代码直接在浏览器DOM侧匹配目标元素,不需要提前调用find_elements拉取元素引用,额外开销为0
  • 如果需要获取元素内部HTML,仅需将回调里的item.textContent.trim()替换为item.innerHTML即可
  • 返回结果直接是和元素顺序一一对应的文本/属性值列表,不需要额外做二次处理

避坑提示:不要采用「先find_elements拿元素列表,再循环把元素传入execute_script取值」的写法,这种写法依然会产生多次跨进程通信,性能提升非常有限。

内容的提问来源于stack exchange,提问作者Gustavo Araújo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:54:18