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

Python Selenium:在滚动元素内滚动直至找到目标元素的方法

解决方案:滚动可滚动Div至目标元素位置

方法一:直接让目标元素滚动到视图(推荐)

利用scrollIntoView()直接作用于目标元素,浏览器会自动滚动其所在的可滚动容器,让元素进入可见区域。配合显式等待处理元素加载延迟,避免定位失败。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 定位可滚动容器
scrollableSectionXPATH = '//*[@id="root"]/div/div[2]/div[2]/div/div[2]/div' 
scrollableSection = context.driver.find_element(By.XPATH, scrollableSectionXPATH)

# 修正目标元素XPath的引号嵌套问题(原代码会触发语法错误)
element_xpath = '//form[@class="field-config"]/div[1]/div[1]/div[1]/div[1]'

# 显式等待目标元素可被定位,最长等待10秒
target_element = WebDriverWait(context.driver, 10).until(
    EC.presence_of_element_located((By.XPATH, element_xpath))
)

# 让目标元素滚动到视图中,block参数控制元素对齐方式,behavior控制滚动动画
context.driver.execute_script(
    "arguments[0].scrollIntoView({behavior: 'auto', block: 'center'});", 
    target_element
)
  • block: 'center'可让元素居中显示,替换为'start'则让元素顶部对齐容器顶部
  • behavior: 'smooth'实现平滑滚动,'auto'为即时滚动,可按需选择

方法二:循环滚动容器直到元素可见

针对动态加载内容的场景,循环滚动可滚动容器,每次滚动后检查目标元素是否可见,直到找到元素或滚动至容器底部。

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

scrollableSectionXPATH = '//*[@id="root"]/div/div[2]/div[2]/div/div[2]/div' 
scrollableSection = context.driver.find_element(By.XPATH, scrollableSectionXPATH)
element_xpath = '//form[@class="field-config"]/div[1]/div[1]/div[1]/div[1]'

# 获取容器初始滚动高度
last_height = context.driver.execute_script("return arguments[0].scrollHeight", scrollableSection)

while True:
    # 尝试定位并检查元素是否可见
    try:
        target_element = context.driver.find_element(By.XPATH, element_xpath)
        if target_element.is_displayed():
            context.driver.execute_script("arguments[0].scrollIntoView();", target_element)
            break
    except:
        pass
    
    # 滚动容器至当前底部
    context.driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scrollableSection)
    time.sleep(1)  # 等待滚动后新内容加载
    
    # 判断是否已滚动至容器底部
    new_height = context.driver.execute_script("return arguments[0].scrollHeight", scrollableSection)
    if new_height == last_height:
        print("已滚动到底部,未找到目标元素")
        break
    last_height = new_height
  • 若无需一次性滚到底部,可将scrollTop = scrollHeight改为scrollTop += 500,实现每次滚动固定距离
  • 可根据实际需求调整等待时间time.sleep(1)的时长

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:57:38