Python Selenium Webdriver选择下拉框后动态表单未加载新增字段问题
问题原因
直接通过JavaScript修改下拉框的selectedIndex属性只会修改DOM属性值,不会触发下拉框绑定的change事件,而表单联动新增字段的逻辑正是监听该事件触发的,因此不会加载后续字段。
解决方案
提供两种可行实现方式:
方式一:使用Selenium原生Select类操作(推荐)
Selenium自带的Select工具类针对下拉框的操作会自动触发对应的交互事件,无需额外处理:
from selenium import webdriver from selenium.webdriver.support.ui import Select from selenium.webdriver.common.by import By driver = webdriver.Chrome("C:\\Users\\xxx\\Downloads\\chromedriver_win32\\chromedriver.exe") driver.maximize_window() driver.implicitly_wait(50) driver.get("https://www.cersai.org.in/CERSAI/dbtrsrch.prg") # 选择借款人类型下拉框 borrower_select = Select(driver.find_element(By.ID, "borrowerType")) borrower_select.select_by_index(1) # 选择资产类别下拉框 asset_select = Select(driver.find_element(By.ID, "assetCategory")) asset_select.select_by_index(1)
你也可以根据需求替换为select_by_value(按option的value值选择)或select_by_visible_text(按option显示的文本选择)方法。
方式二:JS修改后手动触发change事件
如果确实需要通过JS操作,修改属性后主动触发change事件即可:
from selenium import webdriver driver = webdriver.Chrome("C:\\Users\\xxx\\Downloads\\chromedriver_win32\\chromedriver.exe") driver.maximize_window() driver.implicitly_wait(50) driver.get("https://www.cersai.org.in/CERSAI/dbtrsrch.prg") # 操作第一个下拉框 driver.execute_script("document.getElementById('borrowerType').selectedIndex = '1';") driver.execute_script("document.getElementById('borrowerType').dispatchEvent(new Event('change'));") # 操作第二个下拉框 driver.execute_script("document.getElementById('assetCategory').selectedIndex = '1';") driver.execute_script("document.getElementById('assetCategory').dispatchEvent(new Event('change'));")
补充说明
如果操作后字段加载有延迟,可额外添加显式等待,等待新增字段渲染完成后再执行后续操作,避免元素定位失败。
内容的提问来源于stack exchange,提问作者Giffen
相关产品推荐
相关产品推荐

