
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) <p>? <strong>关键注意事项:</strong> </p>
-
避免
time.sleep():它无法响应页面真实状态,易导致漏抓或超时;显式等待才是健壮方案。 -
检查选择器稳定性:
.iiDzWW、.blaZP等类名可能随前端更新变动,建议结合data-*属性或更语义化定位策略(如By.CSS_SELECTOR配合属性筛选)。 -
处理滚动加载:若目标元素需滚动才出现,应在等待前执行
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")并加入滚动后等待逻辑。 -
增加容错与日志:如示例中对
teams长度校验、span查找异常捕获,可显著提升脚本鲁棒性。
总结:不是 Selenium “找不到”,而是你“没等够”。用对 WebDriverWait + expected_conditions,即可稳定获取全部动态渲染元素。










