selenium自动化测试——滚动到指定元素

一、滚动的作用

滚动是指页面自动或手动向上或向下移动,从而显示隐藏在浏览器视窗外的内容。一些网页会将部分内容隐藏,需要滚动才能看到;有时,为了更好的用户体验,需要实现页面的滚动,例如:滚动到顶部或底部实现加载更多。

二、selenium中滚动方法介绍

selenium支持三种滚动方式:

1、使用Javascript执行滚动

from selenium.webdriver.common.action_chains import AcitonChains

# 执行Javascript,滚动到目标元素
target_ele = driver.find_element_by_css_selector("#target-element")
driver.execute_script("arguments[0].scrollIntoView();", target_ele)

说明:

①find_element_by_css_selector:查找目标元素;

②execute_script:执行JavaScript脚本,滚动到目标元素。

2、使用Keys.ARROW_DOWN键盘按键

from selenium.webdriver.common.keys import Keys

# 执行键盘按键,向下滚动
target_ele = driver.find_element_by_css_selector("#target-element")
target_ele.send_keys(Keys.ARROW_DOWN)

说明:

①find_element_by_css_selector:查找目标元素;

②send_keys(Keys.ARROW_DOWN):执行向下滚动。

3、使用ActionChains实现鼠标滚轮滚动

from selenium.webdriver.common.action_chains import ActionChains

# 执行鼠标滚轮滚动,滚动到目标元素
target_ele = driver.find_element_by_css_selector("#target-element")
ActionChains(driver).move_to_element(target_ele).perform()

说明:

①find_element_by_css_selector:查找目标元素;

②ActionChains(driver).move_to_element(target_ele).perform():鼠标移动到目标元素,并向下滚动。

三、滚动到指定元素为中心

有时候,需要滚动到指定元素为中心点,使得该元素在浏览器视窗的中心,代码实现如下:

from selenium.webdriver.common.action_chains import ActionChains

# 执行Javascript,滚动到目标元素
target_ele = driver.find_element_by_css_selector("#target-element")
driver.execute_script("arguments[0].scrollIntoView();", target_ele)

# 获取当前浏览器窗口大小
window_size = driver.get_window_size()

# 计算目标元素在浏览器视窗中心点的坐标
x = int(window_size["width"] / 2)
y = int(target_ele.location["y"] + target_ele.size["height"] / 2)

# 执行鼠标移动到目标元素并执行滚轮滚动
ActionChains(driver).move_to_element_with_offset(target_ele, 0, -50).perform()
ActionChains(driver).move_to_element_with_offset(target_ele, 0, -70).perform()
ActionChains(driver).move_to_element_with_offset(target_ele, 0, -90).perform()

说明:

①find_element_by_css_selector:查找目标元素;

②execute_script:执行JavaScript脚本,滚动到目标元素;

③get_window_size:获取浏览器窗口大小;

④location、size:获取元素的位置和大小;

⑤ActionChains(driver).move_to_element_with_offset(target_ele, x, y):鼠标移动到指定元素并执行滚轮。

四、滚动的注意事项

在使用滚动的时候,需要注意以下几点:

1、等待元素加载完成再执行滚动

有时候,需要等待元素加载完成之后,滚动到目标元素,避免出现找不到元素的情况。

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

# 等待目标元素加载
target_ele = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "#target-element"))
)

# 执行Javascript,滚动到目标元素
driver.execute_script("arguments[0].scrollIntoView();", target_ele)

说明:

①presence_of_element_located:等待元素出现;

②until:等待时间是10秒钟。

2、滚动时避免遮挡元素

有时候,因为页面布局等原因,可能会出现目标元素被其它元素遮挡的情况,需要通过设置偏移量来避免。

from selenium.webdriver.common.action_chains import ActionChains

# 执行Javascript,滚动到目标元素
target_ele = driver.find_element_by_css_selector("#target-element")
driver.execute_script("arguments[0].scrollIntoView();", target_ele)

# 计算目标元素在浏览器视窗中心点的坐标
window_size = driver.get_window_size()
x = int(window_size["width"] / 2)
y = int(target_ele.location["y"] + target_ele.size["height"] / 2)

# 执行鼠标移动到目标元素并执行滚轮滚动
ActionChains(driver).move_to_element_with_offset(target_ele, 0, -50).perform()
ActionChains(driver).move_to_element_with_offset(target_ele, 0, -70).perform()
ActionChains(driver).move_to_element_with_offset(target_ele, 0, -90).perform()

说明:

在滚动前,先通过JavaScript将目标元素滚动到浏览器视窗的中心,然后通过ActionChains设置偏移量滚动页面。

3、多次滚动以避免惯性滚动

由于JavaScript滚动和鼠标滚动都是以一定的速度滚动的,可能会出现惯性滚动的情况,需要通过多次滚动以避免。

from selenium.webdriver.common.action_chains import ActionChains

# 执行Javascript,滚动到目标元素
target_ele = driver.find_element_by_css_selector("#target-element")
driver.execute_script("arguments[0].scrollIntoView();", target_ele)

# 获取当前浏览器窗口大小
window_size = driver.get_window_size()

# 计算目标元素在浏览器视窗中心点的坐标
x = int(window_size["width"] / 2)
y = int(target_ele.location["y"] + target_ele.size["height"] / 2)

# 执行鼠标移动到目标元素并执行滚轮滚动
ActionChains(driver).move_to_element_with_offset(target_ele, 0, -50).perform()
ActionChains(driver).move_to_element_with_offset(target_ele, 0, -70).perform()
ActionChains(driver).move_to_element_with_offset(target_ele, 0, -90).perform()

说明:

通过多次执行滚动,可以将惯性滚动的距离逐渐减小。

原创文章,作者:EBXJS,如若转载,请注明出处:https://www.506064.com/n/363917.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
EBXJSEBXJS
上一篇 2025-03-12 18:48
下一篇 2025-03-15 09:22

相关推荐

  • Python遍历集合中的元素

    本文将从多个方面详细阐述Python遍历集合中的元素方法。 一、for循环遍历集合 Python中,使用for循环可以遍历集合中的每个元素,代码如下: my_set = {1, 2…

    编程 2025-04-29
  • 使用Selenium爬虫实现数据采集

    本文将详细阐述如何使用Selenium爬虫实现数据采集,包括Selenium的基本用法,Selenium + Beautiful Soup库的用法以及常见问题的解决方案。如果您是初…

    编程 2025-04-29
  • Python列表中大于某数的元素处理方法

    本文将会介绍如何在Python列表中找到大于某数的元素,并对其进行进一步的处理。 一、查找大于某数的元素 要查找Python列表中大于某数的元素,可以使用列表推导式进行处理。 nu…

    编程 2025-04-29
  • JDK Flux 背压测试

    本文将从多个方面对 JDK Flux 的背压测试进行详细阐述。 一、Flux 背景 Flux 是 JDK 9 对响应式编程的支持。它为响应式编程提供了一种基于推拉模型的方式,以支持…

    编程 2025-04-29
  • Python Set元素用法介绍

    Set是Python编程语言中拥有一系列独特属性及特点的数据类型之一。它可以存储无序且唯一的数据元素,这使得Set在数据处理中非常有用。Set能够进行交、并、差集等操作,也可以用于…

    编程 2025-04-29
  • Python编程实现列表元素逆序存放

    本文将从以下几个方面对Python编程实现列表元素逆序存放做详细阐述: 一、实现思路 一般来说,使用Python将列表元素逆序存放可以通过以下几个步骤实现: 1. 定义一个列表 2…

    编程 2025-04-29
  • Python集合加入元素

    Python中的集合是一种无序且元素唯一的集合类型。集合中的元素可以是数字、字符串、甚至是其他集合类型。在本文中,我们将从多个方面来探讨如何向Python集合中加入元素。 一、使用…

    编程 2025-04-29
  • Java创建一个有10万个元素的数组

    本文将从以下方面对Java创建一个有10万个元素的数组进行详细阐述: 一、基本介绍 Java是一种面向对象的编程语言,其强大的数组功能可以支持创建大规模的多维数组以及各种复杂的数据…

    编程 2025-04-28
  • 如何在谷歌中定位系统弹框元素

    本文将从以下几个方面为大家介绍如何在谷歌中准确地定位系统弹框元素。 一、利用开发者工具 在使用谷歌浏览器时,我们可以通过它自带的开发者工具来定位系统弹框元素。 首先,我们可以按下F…

    编程 2025-04-28
  • Python三种基本输入元素

    本文将从多个方面对于Python三种基本输入元素进行详细的阐述并给出代码示例。 一、Python三种基本输入元素解答 Python三种基本输入元素包括命令行参数、标准输入和文件输入…

    编程 2025-04-28

发表回复

登录后才能评论