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

Python Selenium如何通过find_elements_by_xpath遍历未知数量元素输入值

Python Selenium 按XPath匹配不定数量元素并顺序遍历输入实现

你不需要手动转写JS版本的异步逻辑,Python版本Selenium的API是同步的,写法更简洁:

  • find_elements(包括旧版find_elements_by_xpath)返回的元素列表,默认顺序就是页面DOM从上到下的排列顺序,完全满足从上到下遍历的要求
  • 方法会自动返回所有匹配到的元素,不管数量是1个还是上百个,不需要提前获取元素总数

推荐实现(Selenium 4+ 主流版本)

Selenium 4之后旧的find_elements_by_xpath已经被标记为废弃,统一用find_elements搭配定位器类型使用:

from selenium.webdriver.common.by import By

# 替换为实际的目标元素XPath
TARGET_XPATH = "//div[@class='input-item']/input"
# 要输入的指定值
INPUT_VALUE = "待填充的内容"

# 获取所有匹配的元素,默认从上到下排序
element_list = driver.find_elements(By.XPATH, TARGET_XPATH)

for elem in element_list:
    # 跳过不可见、不可交互的元素,避免抛错
    if not (elem.is_displayed() and elem.is_enabled()):
        continue
    # 需要清空原有默认值就加下一行,不需要可以删掉
    elem.clear()
    elem.send_keys(INPUT_VALUE)

动态加载页面适配

如果目标元素是动态渲染、不是页面打开就直接加载完成的,可以搭配显式等待,避免拿到空元素列表:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10) # 最长等待10秒
# 等所有匹配元素加载完成后再返回
element_list = wait.until(
    EC.presence_of_all_elements_located((By.XPATH, TARGET_XPATH))
)

# 后续遍历逻辑和上面一致
for elem in element_list:
    if elem.is_displayed() and elem.is_enabled():
        elem.clear()
        elem.send_keys(INPUT_VALUE)

旧版本兼容(Selenium 3.x)

如果你用的是还没升级的Selenium 3版本,可以直接用旧API,逻辑完全一致:

element_list = driver.find_elements_by_xpath(TARGET_XPATH)
for elem in element_list:
    if elem.is_displayed() and elem.is_enabled():
        elem.send_keys(INPUT_VALUE)

你贴的JS示例里重复调用了两次findElements查同一个XPath是冗余写法,不管是JS还是Python版本,第一次查询拿到元素列表后直接遍历即可,不需要重复查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:01:05