使用Selenium无法点击ITF网站球员搜索下拉列表元素求助
解决Selenium无法点击ITF球员搜索下拉选项的问题
你遇到的核心问题是搜索下拉列表属于动态渲染元素,输入关键词后需要等待选项完全加载,再精准定位并点击。以下是修正后的完整代码:
from bs4 import BeautifulSoup from selenium import webdriver from webdriver_manager.firefox import GeckoDriverManager from selenium.webdriver.common.keys import Keys from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By url = 'https://www.itftennis.com/en/players/' player = 'A. Parks' # 初始化浏览器并打开页面 driver = webdriver.Firefox(executable_path=GeckoDriverManager().install()) driver.get(url) # 接受Cookie弹窗 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, '//button[@id="onetrust-accept-btn-handler"]'))).click() # 定位搜索框并输入球员名字 sbox = driver.find_element(By.ID, 'player-search-input') sbox.send_keys(player) # 等待下拉列表中的目标球员选项加载完成并点击 # 通过类名+文本内容组合定位,确保匹配目标球员 target_player = WebDriverWait(driver, 20).until( EC.element_to_be_clickable((By.XPATH, f'//div[contains(@class, "player-search-result-item") and contains(text(), "{player}")]')) ) target_player.click() # 后续可添加球员页面信息提取逻辑 # soup = BeautifulSoup(driver.page_source, 'html.parser') # 具体信息提取代码... # 完成操作后关闭浏览器(可选) # driver.quit()
关键说明:
- 强制等待动态元素:用
WebDriverWait等待目标选项处于可点击状态,避免因元素未加载完成导致的点击失败。 - 精准定位规则:通过
player-search-result-item类名+球员文本的组合XPath,确保定位到的是搜索结果中的目标选项,而非其他相似元素。 - 遮挡场景替代方案:如果直接点击无效,可尝试用ActionChains模拟鼠标操作(适用于元素被遮挡的情况):
from selenium.webdriver.common.action_chains import ActionChains ActionChains(driver).move_to_element(target_player).click().perform()
内容的提问来源于stack exchange,提问作者Liam 92
相关产品推荐
相关产品推荐

