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

Selenium中如何通过find_element获取输入框列表并循环输入OTP

解决Selenium输入OTP时全部字符进入第一个输入框的问题

你遇到的问题根源是find_element()方法只会返回第一个匹配到的输入框元素,所以调用send_keys("123456")时,所有字符都会被输入到这第一个框里。要实现逐个输入框填写的效果,需要先获取所有OTP输入框的列表,再循环为每个框输入对应字符。

解决方案步骤:

  1. 使用find_elements()(注意复数形式)获取所有匹配的OTP输入框,返回一个元素列表。
  2. 确保OTP字符串长度和输入框数量一致,避免出现输入不匹配的情况。
  3. 遍历OTP的每个字符,同时对应到每个输入框,逐个调用send_keys()输入单个字符。

示例代码:

from selenium.webdriver.common.by import By

# 获取所有可见的OTP输入框(过滤掉不可见的元素)
otp_inputs = [
    elem for elem in browser.find_elements(By.XPATH, "//form//input[@type='text']") 
    if elem.is_displayed()
]
otp_code = "123456"

# 校验输入框数量和OTP长度是否匹配
if len(otp_inputs) != len(otp_code):
    raise ValueError("OTP长度与输入框数量不匹配,请检查")

# 循环为每个输入框填入对应字符
for input_box, char in zip(otp_inputs, otp_code):
    input_box.send_keys(char)

补充说明:

  • 如果页面中的OTP输入框有特定的class或其他属性,可以优化XPATH定位,比如//form//input[@class='otp-input' and @type='text'],这样定位更精准,避免匹配到其他无关的文本输入框。
  • 部分网站可能会在输入后自动聚焦下一个框,这段代码的逻辑和手动输入完全一致,每个框只输入一个字符,能适配大多数OTP输入场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:07:49