python之selenium操作下拉滾動條方法 || selenium之頁面滾動至頁面底部的數種解決方案


前言

①在HTML頁面中,由於前端技術框架的原因,頁面中的一些元素為動態顯示,元素根據滾動條的下拉而被加載(元素在當前顯示的頁面不可見,拖動頁面下拉直到該元素出現,此時才可以定位到該元素。)。

②例如:頁面注冊同意條款,需要滾動條到最底層,才能點擊同意。

實例

下面一個網頁,需要進行拖動頁面下拉條后才能通過selenium代碼找到密碼輸入框的元素。

拖動頁面下拉條后:

方法①:使用JavaScript腳本直接操作滾動條元素向下拖動

注意:這里的id為滾動條的id,但js中沒有xpath的方法,所以滾動條沒有id的網頁此方法不適用。

js = "var q=document.getElementById('id').scrollTop=10000"
driver.execute_script(js)

或者:

js = "var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)

方法②:使用JavaScript腳本將滾動條拖動到指定地方:

聚焦元素:就是把滾動條滾動到你想要查找的元素的位置

# 1 定位需要聚焦元素
target = driver.find_element_xx
 
# 2 js代碼
js = "arguments[0].scrollIntoView();"
 
# 3 執行聚焦元素操作
driver.execute_script(js代碼, 元素target)

注意使用該方法需要獲取將滾動條拖動至指定元素的元素對象定位。

target = driver.find_element_by_id("id_keypair")  # 需要將滾動條拖動至的指定的元素對象定位
driver.execute_script("arguments[0].scrollIntoView();", target) # 將滾動條拖動到元素可見的地方

該方法可以將頁面滾動條拖動到需要顯示的元素位置,此方法用途比較廣,可以使用。

示例:

頁面代碼:

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <style type="text/css">
        button{padding: 8px; background: #f8f8f8;border-radius: 5px}
        button{margin-left:200px;margin-top:2000px}
    </style>
</head>
<body>
    <button type="submitA" value="注冊A" title="加入會員A" >注冊用戶A</button>
</body>
</html>

腳本代碼:

"""
1.學習目標:
    掌握聚焦元素的操作方法
2.語法(操作方法)
    2.1 定位需要聚焦元素
        target = driver.find_element_xx
    2.2 js代碼
        js = "arguments[0].scrollIntoView()"
    2.3 執行聚焦元素操作
        driver.execute_script(js代碼,元素target)
3.需求
    在頁面中,滾動條下拉聚焦元素位置。
"""
# 1.導入selenium
from selenium import webdriver
from time import sleep
import os

# 2.打開瀏覽器
driver = webdriver.Chrome()

# 3.打開頁面
url = "file:///" + os.path.abspath("./1.html")
driver.get(url)
sleep(2)

# 4.滾動條下拉聚焦元素位置
# 4.1 定位需要聚焦元素-淘寶首頁的END文字
element = driver.find_element_by_css_selector("[type='submitA']")

# 4.2 js代碼
js = "arguments[0].scrollIntoView()"

# 4.3 執行聚焦元素操作
driver.execute_script(js, element)
sleep(3)

# 5.關閉瀏覽器
driver.quit()

方法③:根據頁面顯示進行變通實現滾動條下拉效果:

在本實例中的頁面中,密碼是輸入框,正常手工操作時,可以通過tab鍵可以從用戶框切換到密碼框中,所以根據此思路,在腳本中也可以發送tab鍵來切換,使元素顯示。

from selenium.webdriver.common.keys import Keys  # 導入Keys類

driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)  # 定位元素並操作輸入

方法④:send_keys(Keys.Space) 模擬向頁面發送空格鍵實現滾動條下拉效果:

注意:發送空格鍵的元素應該是整個頁面對象,比如說定位到頁面body后進行操作。

# coding=utf-8
import time

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import TimeoutException

browser = webdriver.Chrome(executable_path="G:/dj/chromedriver.exe")

browser.set_window_size(1400, 900)


def search():
    try:
        browser.get("https://www.taobao.com")
        for i in range(5):
            browser.find_element_by_tag_name('body').send_keys(Keys.SPACE)
            time.sleep(1)
    except TimeoutException:
        search()


search()

方法⑤:鼠標移動到指定元素位置

# coding=utf-8
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.action_chains import ActionChains

browser = webdriver.Chrome("G:/dj/chromedriver.exe")

browser.set_window_size(1400, 900)


def search():
    try:
        browser.get("https://www.taobao.com")

        target = browser.find_element_by_css_selector('body > div:nth-child(29)')

        actions = ActionChains(browser)

        actions.move_to_element(target)

        actions.perform()

    except TimeoutException:
        search()


search()

方法⑥:操作滾動條實現

"""
設置JavaScritp腳本控制滾動條
"""
js = "window.scrollTo(0, 1000)"  # (0:水平距離;1000:垂直距離;單位像素px)

"""
WebDriver調用JavaScritp腳本方法
"""
driver.execute_script(js)

# 提示:
"""最頂層"""
js = "window.scrollTo(0,0)"

"""最底層"""
js = "window.scrollTo(0,1000)"
# 注:1000不代表一定到最底層,要根據瀏覽器頁面的實際大小。

"""
直接操作垂直距離的方式
"""
js = "var q=document.documentElement.scrollTop=n"

示例:

"""
1.學習目標:
    掌握瀏覽器滾動條的操作方法
2.語法
    2.1使用js語言編寫控制滾動條代碼
        參數:
            0,表示水平距離;
            10000,表示垂直距離  單位:px
        格式:
            向下滾動:window.scrollTo(0,10000)
            向上滾動:window.scrollTo(0,0)
    2.2使用selenium中方法執行js代碼
        driver.execute_script(js代碼)
3.需求
    在頁面中,控制滾動條
4.總結
    如果需要測試寫的js代碼,可以在瀏覽器F12,控制台console中執行查看結果。
"""
# 1.導入selenium
from selenium import webdriver
from time import sleep

# 2.打開瀏覽器
driver = webdriver.Chrome()

# 3.打開頁面
url = "https://www.taobao.com"
driver.get(url)
sleep(2)

# 4.滾動條操作
# 4.1 滾動條向下滾動
js_down = "window.scrollTo(0,1000)"
# 執行向下滾動操作
driver.execute_script(js_down)
sleep(2)

# 4.2 滾動條向上滾動
js_up = "window.scrollTo(0,0)"
driver.execute_script(js_up)
sleep(2)

# 向下滾動操作
# n為從頂部往下移動滾動距離
js1 = "var q=document.documentElement.scrollTop=2000"
driver.execute_script(js1)
sleep(2)

# 5.關閉瀏覽器
driver.quit()

注意:

window.scrollBy(0, 100):從當前位置向下滾動100像素;

window.scrollTo(0,100):從0滾動到100像素,

這兩個方法都是滾動操作,但是scrollTo方法只會從0像素滾動到100像素,除非修改數值才可以滾動到對應像素位置,二scrollBy則會一直向下滾動。

# coding=utf-8
import time

from selenium import webdriver
from selenium.common.exceptions import TimeoutException


def search():
    t = True
    time.sleep(1)
    while t:
        driver.execute_script("window.scrollBy(0, 1000)")
        try:
            driver.find_element('link_text', '沒有更多推薦了,返回首頁').click()
            time.sleep(1)
            t = False
        except TimeoutException:
            search()


if __name__ == '__main__':
    driver = webdriver.Chrome()
    driver.get("https://blog.csdn.net/sily_z/article/details/80733267")
    driver.maximize_window()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM