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/zh-hant/n/363917.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
EBXJS的頭像EBXJS
上一篇 2025-03-12 18:48
下一篇 2025-03-15 09:22

相關推薦

  • Python遍歷集合中的元素

    本文將從多個方面詳細闡述Python遍歷集合中的元素方法。 一、for循環遍歷集合 Python中,使用for循環可以遍歷集合中的每個元素,代碼如下: my_set = {1, 2…

    編程 2025-04-29
  • JDK Flux 背壓測試

    本文將從多個方面對 JDK Flux 的背壓測試進行詳細闡述。 一、Flux 背景 Flux 是 JDK 9 對響應式編程的支持。它為響應式編程提供了一種基於推拉模型的方式,以支持…

    編程 2025-04-29
  • 使用Selenium爬蟲實現數據採集

    本文將詳細闡述如何使用Selenium爬蟲實現數據採集,包括Selenium的基本用法,Selenium + Beautiful Soup庫的用法以及常見問題的解決方案。如果您是初…

    編程 2025-04-29
  • Python列表中大於某數的元素處理方法

    本文將會介紹如何在Python列表中找到大於某數的元素,並對其進行進一步的處理。 一、查找大於某數的元素 要查找Python列表中大於某數的元素,可以使用列表推導式進行處理。 nu…

    編程 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

發表回復

登錄後才能評論