如何使用Selenium从下拉列表/地址列表中选择元素?
如何用Selenium从地址下拉列表中选择元素
针对你的需求,要选择'Surrey, BC, Canada'这个地址选项,原代码存在几个问题:
- 错误调用了标准库的
select.select(),没有关联到页面元素 - 地址下拉框大概率不是原生
<select>标签(这类自定义下拉在网页中很常见),因此Selenium的Select类并不适用
以下是修正后的完整代码,改用显式等待定位并点击目标选项:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC s=Service("C:\Drivers\chromedriver_win32\chromedriver.exe") driver = webdriver.Chrome(service=s) driver.maximize_window() driver.get("https://app.mondofi.co/") # 登录操作 driver.find_element("xpath", '//*[@id="root"]/div/div/form/div[1]/div/input').send_keys("stage_mondofi") driver.find_element("xpath", '//*[@id="root"]/div/div/form/div[2]/div/div/input').send_keys("Z3Pytzsh56eQSZmH") driver.find_element("xpath", '//*[@id="root"]/div/div/form/div[3]/button').click() # 等待页面跳转后点击对应菜单 WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, '//*[@id="root"]/div/div[3]/div[1]/div/div[2]/div/div[2]/ul/li[3]/a')) ).click() # 填写表单信息 driver.find_element("xpath", '//*[@id="root"]/div/div[2]/div/div/div[2]/div/div/form/div/div[2]/div/div/input').send_keys("Ash") driver.find_element("xpath", '//*[@id="root"]/div/div[2]/div/div/div[2]/div/div/form/div/div[3]/div/div/input').send_keys("Ish") driver.find_element("xpath", '//*[@id="root"]/div/div[2]/div/div/div[2]/div/div/form/div/div[4]/div/div/input').send_keys("ash@yopmail.com") driver.find_element("xpath", '//*[@id="root"]/div/div[2]/div/div/div[2]/div/div/form/div/div[5]/div/div/input').send_keys(9418035364) driver.find_element("xpath", '//*[@id="root"]/div/div[2]/div/div/div[2]/div/div/form/div/div[6]/div/div/input').send_keys("Lake View") driver.find_element("xpath", '//*[@id="root"]/div/div[2]/div/div/div[2]/div/div/form/div/div[7]/div/div[1]/input').send_keys("Lake") # 输入地址关键词并等待下拉选项出现 address_input = driver.find_element("xpath", '//*[@id="root"]/div/div[2]/div/div/div[2]/div/div/form/div/div[9]/div/div/div[1]/input') address_input.send_keys("Surrey") # 等待目标地址选项可点击并点击 target_address = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//div[contains(text(), 'Surrey, BC, Canada')]")) ) target_address.click()
关键说明:
- 替换了不可靠的
time.sleep,改用WebDriverWait显式等待,确保元素加载完成后再操作,大幅提升代码稳定性 - 针对自定义下拉列表,直接定位包含目标文本的元素并点击,这是处理非原生select下拉的通用方法
- 移除了无用的
select库导入,因为此处不需要原生select的操作逻辑
内容的提问来源于stack exchange,提问作者Ashish Sharma
相关产品推荐
相关产品推荐

