Python Selenium循环填充同ID多输入框仅第一个生效如何解决
问题原因
你当前的代码存在3个核心问题导致只能填充第一个输入框:
- 循环逻辑错误:你将统计到的表数转为字符串后遍历,比如存在3个表时,
thecountofmeters值为"3",循环只会执行1次,无法匹配实际的表数量 - 元素定位始终取第一个:每次调用
find_element系列方法时,默认返回页面中第一个匹配的元素,因此不管循环多少次,操作的都是第一个触发按钮和第一个输入框 - 冗余设置:隐式等待只需全局设置1次即可,无需每次操作前重复声明
修改后的代码
# 全局设置隐式等待,只需设置一次 browser.implicitly_wait(30) # 直接获取所有表选项的元素列表,而非只取长度 meter_list = browser.find_elements_by_xpath("//span[contains(@class,'meterdisplay')]") print(f"There are {len(meter_list)} Meter Options") # 遍历每个表选项元素 for meter_item in meter_list: # 点击当前遍历到的表选项,而非固定点击第一个 meter_item.click() # 读取当前弹出框的上次读数 thelastmeter = browser.find_element_by_id("meteredit-lastreading-display").text print(thelastmeter) # 操作当前弹出框的输入框(前一个弹出框已点击确认关闭,当前只有一个激活的同ID输入框) input_ele = browser.find_element_by_id('meteredit-display') input_ele.clear() input_ele.send_keys(thelastmeter) # 点击确认关闭当前弹出框,处理下一个表 browser.find_element_by_name('ok').click()
补充说明
如果点击表选项后弹出框不会自动关闭,存在多个同ID输入框同时显示的情况,可以改用find_elements获取所有同ID输入框后按索引匹配操作:
all_inputs = browser.find_elements_by_id('meteredit-display') # 第n个表对应索引为n-1的输入框 all_inputs[index].clear() all_inputs[index].send_keys(thelastmeter)
内容的提问来源于stack exchange,提问作者Youngbuck2
相关产品推荐
相关产品推荐

