使用Selenium定位符合href特征的ITF网球赛事链接方法求助
问题排查与解决方案
- 确认Selenium版本与API兼容性
你使用的find_elements_by_css_selector属于Selenium 4.0+版本已废弃的旧API,建议替换为标准写法:from selenium.webdriver.common.by import By elems = driver.find_elements(By.CSS_SELECTOR, "a[href*='/en/tournament/m']") - 添加显式等待适配异步渲染内容
该站点的赛事列表属于动态加载内容,直接执行选择器时对应DOM节点还未生成,建议设置最长等待时间直到目标元素加载完成:from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC # 最长等待10秒,直到至少有1个符合条件的a标签出现 wait = WebDriverWait(driver, 10) elems = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "a[href*='/en/tournament/m']"))) - 检查元素是否嵌套在iframe中
打开浏览器开发者工具查看目标a标签的上层节点,如果存在iframe/frame标签,需要先切换到对应iframe再执行元素定位:# 按实际页面的iframe属性调整定位方式,示例为按id定位 iframe = driver.find_element(By.ID, "calendar-iframe") driver.switch_to.frame(iframe) # 切换完成后再执行元素选择逻辑 - 排查反爬触发情况
如果请求触发了站点反爬机制,返回的是验证页或空白内容,自然找不到目标元素,可以先打印当前页面源码确认内容是否正常:
确认触发反爬后,可以通过调整请求头、添加有效cookie、降低访问频率等方式规避限制。print(driver.page_source)
内容的提问来源于stack exchange,提问作者ljmc
相关产品推荐
相关产品推荐

