如何使用Python Selenium修改只读input下拉框的value属性值
问题排查&解决方案
你之前操作不生效的核心原因有3个:
- 用
getElementsByTagName按索引找元素不可靠,页面结构稍有变动就会定位到错误的input setAttribute参数写错:第一个参数应该是属性名value,你误填成了原属性值7 days,自然不会生效- 模拟按键前没有激活下拉框,焦点不在选项区域,TAB、ENTER操作自然没有响应
方案1:直接通过JS修改值(最稳定,无需处理readonly属性)
不需要单独删除readonly属性,直接通过JS修改目标input的value即可,顺便触发change事件保证页面识别值变更:
# 用你原有xpath定位到目标input date_input = driver.find_element_by_xpath('/html/body/.../div/input') # 修改value driver.execute_script("arguments[0].value = 'Custom date';", date_input) # 触发change事件,适配页面的联动逻辑 driver.execute_script("arguments[0].dispatchEvent(new Event('change'));", date_input)
方案2:模拟按键选择的修正版
如果必须通过点击选择的方式操作,要先激活下拉框,再用ActionChains执行连贯按键操作,避免焦点丢失:
from selenium.webdriver.common.keys import Keys from selenium.webdriver.common.action_chains import ActionChains date_input = driver.find_element_by_xpath('/html/body/.../div/input') # 点击input激活下拉选项列表 date_input.click() # 连贯执行按键操作 actions = ActionChains(driver) actions.send_keys(Keys.TAB)\ .send_keys(Keys.TAB)\ .send_keys(Keys.ENTER)\ .perform()
内容的提问来源于stack exchange,提问作者backfischxx
相关产品推荐
相关产品推荐

