Selenium中如何通过find_element获取输入框列表并循环输入OTP
解决Selenium输入OTP时全部字符进入第一个输入框的问题
你遇到的问题根源是find_element()方法只会返回第一个匹配到的输入框元素,所以调用send_keys("123456")时,所有字符都会被输入到这第一个框里。要实现逐个输入框填写的效果,需要先获取所有OTP输入框的列表,再循环为每个框输入对应字符。
解决方案步骤:
- 使用
find_elements()(注意复数形式)获取所有匹配的OTP输入框,返回一个元素列表。 - 确保OTP字符串长度和输入框数量一致,避免出现输入不匹配的情况。
- 遍历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
相关产品推荐
相关产品推荐

