Python Selenium使用Select类操作下拉框无法选中选项如何解决?
问题解决方法
失效原因
你遇到的是典型的自定义绑定事件下拉框适配问题:该站点的区域下拉框绑定了专属的change事件监听,Selenium原生的Select类操作有时无法主动触发该事件,导致页面没有响应选中操作。
可行解决步骤
- 第一步:添加显式等待,确保点击年龄确认按钮后,下拉框元素完全加载可交互,避免元素未渲染就执行操作的问题
- 第二步:放弃原生
Select类操作,改用execute_script直接通过JS修改下拉框选中值,同时手动触发change事件,保证页面响应选中结果
可直接运行的修改后代码
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC def main(website): driver = webdriver.Chrome(executable_path='chromedriver_win32/chromedriver.exe') driver.get(website) # 等待年龄确认按钮可点击再操作 acceptage_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "/html/body/div[1]/header/div[2]/input[1]")) ) acceptage_btn.click() # 等待区域下拉框加载完成 region_select = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.XPATH, "/html/body/div[1]/main/form/fieldset/div[1]/select")) ) # 用JS直接设置选中值,同时触发change事件 driver.execute_script(""" arguments[0].value = '3'; arguments[0].dispatchEvent(new Event('change')); """, region_select) if __name__ == "__main__": main('https://www.shop.liquorland.co.nz/splash.aspx?ReturnUrl=%2f')
补充说明
如果需要选中其他区域,只需要修改JS代码里的value值,或者对应调整JS逻辑匹配visible_text的筛选规则即可,该方案兼容大部分有自定义事件绑定的下拉框场景。
内容的提问来源于stack exchange,提问作者BlitzBladeRR
相关产品推荐
相关产品推荐

