Selenium下拉选择器使用报错求助:Select类调用失败排查
Selenium使用Select选择器报错问题
问题描述
执行Select(web.find_element("id",'ticket-quantity-selector-756706789'))时终端无法正常运行,以下是报错信息及完整代码:
报错信息
self.execute(Command.GET, {'url': url}) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 429, in execute self.error_handler.check_response(response) File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 243, in check_response
完整代码
from selenium import webdriver from selenium.webdriver.support.ui import Select import time web = webdriver.Chrome() web.get('https://www.eventbrite.fr/e/masquerade-party-tickets-443305678217') time.sleep(5) cookie = web.find_element("xpath",'//*[@id="_evidon-accept-button"]') cookie.click() info = web.find_element("xpath",'//*[@id="eventbrite-widget-modal-trigger-443305678217"]') info.click() CoupC = Select(web.find_element("id",'ticket-quantity-selector-756706789')) CoupC.select_by_visible_text("5") //*[@id="ticket-quantity-selector-756706789"] CoupS = Select(web.find_element("id",'ticket-quantity-selector-756706799')) CoupS.select_by_visible_text("5") Cliquer = web.find_element("xpath",'//*[@id="root"]/div/div/div/div/div[1]/div[1]/div/main/div/div[2]/div/div/div[2]/button') Cliquer.click() time.sleep(3)
问题分析与解决办法
修复语法错误
代码中存在无效的Python代码行//*[@id="ticket-quantity-selector-756706789"],这是直接复制的XPATH,不属于合法代码,需立即删除该行。替换固定等待为显式等待
time.sleep是固定时长等待,无法确保元素加载完成,改用显式等待能精准等待元素就绪后再操作,避免元素未加载导致的报错:
from selenium import webdriver from selenium.webdriver.support.ui import Select from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC web = webdriver.Chrome() web.get('https://www.eventbrite.fr/e/masquerade-party-tickets-443305678217') # 等待并点击cookie按钮 WebDriverWait(web, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="_evidon-accept-button"]'))).click() # 等待并点击购票按钮 WebDriverWait(web, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="eventbrite-widget-modal-trigger-443305678217"]'))).click() # 等待第一个票量选择器加载并选择数量 coupc_elem = WebDriverWait(web, 10).until(EC.presence_of_element_located((By.ID, 'ticket-quantity-selector-756706789'))) CoupC = Select(coupc_elem) CoupC.select_by_visible_text("5") # 等待第二个票量选择器加载并选择数量 coups_elem = WebDriverWait(web, 10).until(EC.presence_of_element_located((By.ID, 'ticket-quantity-selector-756706799'))) CoupS = Select(coups_elem) CoupS.select_by_visible_text("5") # 等待并点击确认按钮 WebDriverWait(web, 10).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="root"]/div/div/div/div/div[1]/div[1]/div/main/div/div[2]/div/div/div[2]/button'))).click() time.sleep(3) web.quit()
- 确认元素类型
Selenium的Select类仅支持原生HTML的<select>标签元素,如果目标票量选择器是自定义的下拉组件(如div模拟的下拉),则不能使用Select,需改为点击下拉框展开选项,再点击对应数量的选项。
内容的提问来源于stack exchange,提问作者Neptunia
相关产品推荐
相关产品推荐

