使用Python Selenium仅能更新一个WebElement值,求解决双元素更新问题
解决Selenium无法更新禁用/只读输入框的问题
看起来你遇到的问题很典型——页面里的那个modelName输入框带有disabled和readonly属性,这会阻止Selenium通过常规的send_keys()方法修改它的值,而另一个能成功更新的元素应该是没有这些限制的。下面是具体的解决方案:
方法1:移除限制属性后再设置值
对于带有disabled或readonly的输入框,我们可以通过JavaScript移除这些属性,让输入框变回可交互状态,再用常规方法设置值:
from selenium import webdriver from selenium.webdriver.common.by import By # 定位目标输入框 model_name_input = driver.find_element(By.ID, "modelName") # 移除disabled属性 driver.execute_script("arguments[0].removeAttribute('disabled');", model_name_input) # 移除readonly属性 driver.execute_script("arguments[0].removeAttribute('readonly');", model_name_input) # 清空原有值并设置新值 model_name_input.clear() model_name_input.send_keys("你的新型号名称")
方法2:直接用JavaScript设置值(更简洁)
如果不想修改元素属性,也可以直接通过JavaScript强制修改输入框的value属性,跳过交互限制:
model_name_input = driver.find_element(By.ID, "modelName") # 直接设置值 driver.execute_script("arguments[0].value = '你的新型号名称';", model_name_input)
为什么常规方法失效?
Selenium的send_keys()是模拟真实用户的输入操作,而浏览器会阻止用户对带有disabled或readonly属性的输入框进行编辑,所以常规方法会失败。而JavaScript是直接操作DOM元素的属性,不受这些交互限制的影响。
另外,针对你提到的另一个能成功更新的元素,直接使用send_keys()即可,不需要额外处理。
内容的提问来源于stack exchange,提问作者Rohit Kumar




