鼠标操作演示 · 滚动

scroll_by_amount · scroll_to_element · scroll_to_element_with_offset — 页面滚动的三种 Selenium 原生 API 演示

首页 鼠标操作导航

当前演示 · 鼠标滚动 scroll

演示 Selenium 的 三种滚动方式:按偏移量滚动、滚动到元素可见、滚动到元素并带偏移。Selenium 4.2+ 原生提供,不再依赖 JavaScript 注入 。

📋 参数速查表

API参数说明
scroll_by_amount(dx, dy)dx/dy水平/垂直偏移(正=右下,负=左上)
scroll_to_element(target)target目标元素,自动滚到完全可见
scroll_to_element_with_offset(target, dx, dy)target/dx/dy滚到元素后再加偏移(常用负 dy 避固定导航栏)

⚠️ 常见陷阱(4 个)

左击 右击 双击 移动 按住 释放 拖拽 滚动
08 · 滚动(3 种)

鼠标滚动

scroll_by_amount / scroll_to_element / scroll_to_element_with_offset
什么时候需要滚动?
页面太长元素在屏幕外无法交互、滑块验证需滚动到指定位置、懒加载页面需先滚动触发内容加载。Selenium 4.2 提供原生 scroll_by_amount() 等方法,比旧版 driver.execute_script("window.scrollBy...") 更稳定。
三种方法的"参考原点":scroll_by_amount 以当前视口为原点滚动;scroll_to_element 以元素边界自动对齐;scroll_to_element_with_offset 在滚到元素的基础上再加偏移,最适合避开固定导航栏遮挡。
① scroll_by_amount 按像素偏移量滚动
演示:长列表 + 多种偏移量滚动
条目 01 · 需要滚动才能看到下面的目标元素 👇
条目 02
条目 03
条目 04
条目 05
条目 06
条目 07
条目 08
条目 09
条目 10
条目 11
条目 12
条目 13
条目 14
条目 15
条目 16
条目 17
条目 18
条目 19
条目 20 · 滚到底了
scrollTop: 0 scrollHeight: 0
② scroll_to_element 滚到元素完全可见
演示:自动滚动直到目标元素可见(绿色高亮标记)
条目 01
条目 02
条目 03
条目 04
条目 05
条目 06
条目 07
条目 08
条目 09
条目 10
条目 11
条目 12
条目 13
条目 14
🎯 目标元素(scroll_to_element 会滚到我这里)
注意:scroll_to_element() 会把元素滚到视口底部对齐。如果页面有 position:fixed 的顶部导航栏,元素上半部分会被挡住。这种情况请用 ③ scroll_to_element_with_offset 。
③ scroll_to_element_with_offset 滚到元素 + 偏移微调
演示:先滚到目标元素,再额外向上/向下偏移,避开固定导航栏遮挡
条目 01
条目 02
条目 03
条目 04
条目 05
条目 06
条目 07
条目 08
条目 09
条目 10
条目 11
条目 12
条目 13
条目 14
🎯 目标元素(加偏移后会更居中)
[状态] 请操作上方 3 个滚动 demo,日志会显示在此...
Python Selenium · 3 种滚动方法
# -*- coding: utf-8 -*-
# scroll.py —— Selenium 原生滚动 API 完整演示
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import time

driver = webdriver.Chrome()
driver.get("https://autotest-505.pages.dev/mouse_op_tech_sections/mouse_scroll_tech.html")
actions = ActionChains(driver)

# ── ① scroll_by_amount(dx, dy) ──────────────────────
# 按像素偏移量滚动(正=向下/向右,负=向上/向左)
actions.scroll_by_amount(0, 500).perform()    # 向下滚 500px
time.sleep(1)
actions.scroll_by_amount(0, -300).perform()   # 向上滚 300px

# ── ② scroll_to_element(target) ────────────────────
# 滚动直到目标元素完全可见(底部对齐视口)
target = driver.find_element(By.ID, "submit-btn")
actions.scroll_to_element(target).perform()

# ── ③ scroll_to_element_with_offset(target, dx, dy) ──
# 滚到元素后再加偏移微调(最常用:避开固定导航栏遮挡)
actions.scroll_to_element_with_offset(target, 0, -80).perform()
# 元素上方额外留 80px 间距,避开 70px 高的顶部导航栏

# ── 旧版兼容方案(JavaScript 注入) ──────────────────
# Selenium 4.1 及以下版本没有原生 scroll_by_amount
driver.execute_script("window.scrollBy(0, 500)")
driver.execute_script("arguments[0].scrollIntoView()", target)

# ── 方法对比速查 ──
# scroll_by_amount(dx, dy)           锚点: 当前视口     常用度: ★★★☆☆
# scroll_to_element(target)           锚点: 元素边界     常用度: ★★★★☆
# scroll_to_element_with_offset       锚点: 元素+偏移    常用度: ★★★★★(避遮挡必备)

# 2. 关闭浏览器
driver.quit()

关于我们

Python 自动化测试学习平台是一个面向软件测试工程师、开发人员及在校学生的交互式在线学习平台,专注于 Selenium WebDriver 与 Python unittest 自动化测试技能的教学与实践。

我们以"理论 + 实战 + 可交互演示"为核心特色,将八种常规元素定位和Javascript定位、元素操作、自动化测试工具、单元测试、测试模型等知识体系拆分为模块化课程,每个模块都配有可点击、可输入、可运行的模拟练习页面。

平台致力于降低自动化测试的入门门槛,让学习者从"看懂代码"到"动手实操",逐步掌握企业级自动化测试框架的设计与落地能力。

联系方式

📧邮箱:lq@selenium-auto-test.com

📞电话:0755-12345678

📍地址:深圳

💬微信公众号:Selenium自动化测试

🐙GitHub:github.com/selenium-auto-test

免责声明

1. 本平台所有示例代码、演示页面及教程内容均仅供学习交流使用,不构成任何商业推广或技术服务承诺。

2. 平台中的 Selenium API 描述、Python 语法说明均以官方文档为准,如有版本差异请以对应官方文档为准。

3. 学习者在实际项目中应用平台所学内容时,应结合自身项目环境进行充分测试,本平台不对因直接使用示例代码而产生的任何直接或间接损失承担责任。

4. 本平台所引用的第三方库(Selenium、ChromeDriver、unittest 等)版权归其各自作者及维护者所有。

5. 如涉及版权问题或内容建议,请及时通过联系方式与我们沟通,我们将第一时间处理。