使用Selenium Python爬取时选择下拉菜单选项遇元素定位问题
问题解决:Selenium无法定位公交路线下拉选项
问题根源
- 该网站的下拉菜单是Chosen插件生成的自定义组件,并非原生HTML
<select>标签,因此使用Selenium的Select类完全无效。 - 代码未等待元素加载完成就直接查找,导致元素还未渲染完毕就触发找不到元素的错误。
- 自定义下拉框需要先点击触发展开,才能看到并定位到选项元素。
修正后的代码
import time from selenium import webdriver from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Chrome(ChromeDriverManager().install()) driver.maximize_window() driver.get("https://tmweb.pacebus.com/TMWebWatch/LiveDepartureTimes") # 显式等待下拉框触发按钮加载完成,点击展开选项列表 dropdown_trigger = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.ID, "MainContent_routeList_chosen")) ) dropdown_trigger.click() # 等待目标路线选项加载完成,点击选中 target_route = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.XPATH, "//li[contains(text(), '565 - Grand Avenue')]")) ) target_route.click() time.sleep(5) # 可选,用于验证操作结果 driver.quit()
关键修改说明
- 用
WebDriverWait显式等待替代直接查找元素,确保元素已加载并可交互,避免页面渲染延迟导致的定位失败。 - 先点击下拉框触发区域(
MainContent_routeList_chosen),这是自定义下拉框展开选项的必要操作。 - 通过XPATH匹配目标路线的
<li>元素文本,比类名定位更精准,避免因动态类名变化导致的定位问题。
内容的提问来源于stack exchange,提问作者Keegan
相关产品推荐
相关产品推荐

