You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

问题分析与解决办法

  1. 修复语法错误
    代码中存在无效的Python代码行//*[@id="ticket-quantity-selector-756706789"],这是直接复制的XPATH,不属于合法代码,需立即删除该行。

  2. 替换固定等待为显式等待
    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()
  1. 确认元素类型
    Selenium的Select类仅支持原生HTML的<select>标签元素,如果目标票量选择器是自定义的下拉组件(如div模拟的下拉),则不能使用Select,需改为点击下拉框展开选项,再点击对应数量的选项。

内容的提问来源于stack exchange,提问作者Neptunia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:20:30