
Selenium 本身对 find_elements 查找的元素数量没有内置上限,实际获取不全通常源于页面动态加载未完成就执行查找——需配合显式等待(Explicit Wait)确保目标元素全部可见并稳定渲染。
selenium 元素查找无硬性数量限制,但需确保页面加载完成
在使用 Selenium 进行网页数据抓取时,一个常见误区是认为 find_elements() 方法存在隐式的数量上限(例如“最多返回 99 个”)。实际上,Selenium 本身对可查找到的元素数量没有任何硬性限制。你遇到的始终只捕获约 99 个 .iiDzWW 容器(而非全部约 210 个),根本原因并非框架限制,而是页面内容为动态加载(如通过 JavaScript 分批渲染、懒加载或滚动触发展开),而你的脚本在元素尚未全部出现在 DOM 中时就已执行了查找操作。
当前代码中仅使用 time.sleep(5) 属于盲目等待(blind wait),既不可靠也不高效:5 秒可能过短(部分区块尚未加载),也可能过长(浪费资源),且无法感知真实加载状态。
✅ 正确做法:使用 显式等待(Explicit Wait),配合 expected_conditions 精确等待目标元素群体完全可见并可交互:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
chrome_driver_path = r"C:\Users\damon\OneDrive\code\chromedriver-win64\chromedriver.exe"
service = Service(chrome_driver_path)
driver = webdriver.Chrome(service=service)
try:
driver.get('https://www.supersportbet.com/sportsbook/')
# 显式等待:直到至少 200 个 .iiDzWW 元素全部可见(可根据页面预估调整)
wait = WebDriverWait(driver, 15) # 最长等待 15 秒
bet_containers = wait.until(
EC.visibility_of_all_elements_located((By.CLASS_NAME, "iiDzWW"))
)
print(f"✅ 成功定位 {len(bet_containers)} 个投注容器(预期 ~210)")
all_bets_info = []
for idx, bet_container in enumerate(bet_containers):
try:
teams = bet_container.find_elements(By.CLASS_NAME, "blaZP")
if len(teams) < 2:
continue # 跳过结构异常的容器
team_1_name = teams[0].text.strip()
team_2_name = teams[1].text.strip()
odds_buttons = bet_container.find_elements(By.CLASS_NAME, "sc-1l5be6m-0")
odds = []
for btn in odds_buttons:
try:
span = btn.find_element(By.TAG_NAME, "span")
odds.append(span.text.strip())
except:
continue
all_bets_info.append({
"team_1": team_1_name,
"team_2": team_2_name,
"odds": odds
})
except Exception as e:
print(f"⚠️ 处理第 {idx+1} 个容器时出错: {e}")
continue
print(f"\n? 总共成功提取 {len(all_bets_info)} 条有效投注数据")
finally:
driver.quit()? 关键注意事项:
-
避免
time.sleep():它无法响应页面真实状态,易导致漏抓或超时;显式等待才是健壮方案。 -
检查选择器稳定性:
.iiDzWW、.blaZP等类名可能随前端更新变动,建议结合data-*属性或更语义化定位策略(如By.CSS_SELECTOR配合属性筛选)。 -
处理滚动加载:若目标元素需滚动才出现,应在等待前执行
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")并加入滚动后等待逻辑。 -
增加容错与日志:如示例中对
teams长度校验、span查找异常捕获,可显著提升脚本鲁棒性。
总结:不是 Selenium “找不到”,而是你“没等够”。用对 WebDriverWait + expected_conditions,即可稳定获取全部动态渲染元素。

















