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

Python Selenium爬取Freshbet赛事页面:内部滚动条滚动失效求助

解决Selenium无法滚动Freshbet赛事区域的问题

问题原因

你原代码中定位的div.custom-scrollbar-btn是滚动条的按钮控件,不是承载赛事内容的可滚动容器,修改它的scrollTop自然不会触发内容区域的滚动。

解决方案

核心是找到实际的可滚动内容容器,再通过JavaScript操作它的滚动属性,或者用ActionChains模拟滚轮滚动。

方法1:定位正确容器并修改scrollTop

先通过浏览器开发者工具(F12)找到赛事列表的父容器:右键点击赛事区域→检查元素,找带有overflow-y: scroll/auto样式的容器(通常类名包含custom-scrollbar-content或类似标识)。修改后的代码示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep

url = 'https://freshbet.com/en/sportsbook/prematch'
driver = webdriver.Chrome()
driver.get(url)

sleep(10)
# 切换到iframe,用find_element避免索引定位的不稳定
iframe = driver.find_element(By.TAG_NAME,'iframe')
driver.switch_to.frame(iframe)
# 点击目标元素
driver.find_element(By.XPATH,'//*[@id="prematch-events"]/div[1]/div/div[2]/div[2]').click()
sleep(3)

# 定位实际可滚动容器(根据页面实际元素调整选择器)
scroll_container = driver.find_element(By.CSS_SELECTOR, 'div.custom-scrollbar-content')

# 循环滚动3次
scroll_count = 0
while scroll_count < 3:  
    # 每次滚动容器高度的距离
    driver.execute_script('arguments[0].scrollTop = arguments[0].scrollTop + arguments[0].offsetHeight;', scroll_container)
    # 或者用scrollBy方法:
    # driver.execute_script('arguments[0].scrollBy(0, arguments[0].offsetHeight);', scroll_container)
    scroll_count += 1
    sleep(3)

方法2:模拟鼠标滚轮滚动

如果方法1不生效,可以尝试用ActionChains模拟鼠标滚轮滚动,更贴近用户操作逻辑:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.actions.wheel_input import ScrollOrigin
from time import sleep

url = 'https://freshbet.com/en/sportsbook/prematch'
driver = webdriver.Chrome()
driver.get(url)

sleep(10)
iframe = driver.find_element(By.TAG_NAME,'iframe')
driver.switch_to.frame(iframe)
driver.find_element(By.XPATH,'//*[@id="prematch-events"]/div[1]/div/div[2]/div[2]').click()
sleep(3)

scroll_container = driver.find_element(By.CSS_SELECTOR, 'div.custom-scrollbar-content')

scroll_count = 0
while scroll_count < 3:
    # 从容器位置开始向下滚动对应高度
    scroll_origin = ScrollOrigin.from_element(scroll_container)
    ActionChains(driver)\
        .scroll_from_origin(scroll_origin, 0, scroll_container.size['height'])\
        .perform()
    scroll_count += 1
    sleep(3)

注意事项

  • 避免用find_elements加索引(如[2])定位元素,页面结构变化会导致定位失效,尽量用精准的ID、类名或XPath。
  • 滚动前确保容器已完全加载,可适当调整sleep时间,或改用显式等待(WebDriverWait)替代固定休眠,提升稳定性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:58:20