selenium--瀏覽器滾動條操作


前戲

在進行web自動化的時候,selenium只能找當前屏幕上的標簽,如果標簽在當前頁面沒顯示下,需要拖動滾動條才能查看到這個元素,這時候就要操作瀏覽器的滾動條,讓當前頁面顯示這個元素才可以操作,在我之前做web自動化的時候,也找了很多的操作瀏覽器的方法,有些由於瀏覽器或者版本的問題已經使用不了了,所以下面的方法大家自己去嘗試。

設置滾動條距離頂部的位置

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('xxx')
js = 'var action=document.documentElement.scrollTop=10000'
# 設置滾動條距離頂部的位置,設置為 10000, 超過10000就是最底部
driver.execute_script(js)  # 執行腳本

js = 'var action=document.documentElement.scrollTop=0'  # 回到頂部

driver.execute_script(js)
driver.quit()

 

使用js的scrollTo函數

from selenium import webdriver
import unittest, time


class TestDemo(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()

    def test_scroll(self):
        url = 'http://www.seleniumhq.org/'
        try:
            self.driver.get(url)

            # 使用js的scrollTo函數和document.body.scrollHeight參數
            # 將頁面的滾動條滑動到頁面的最下方
            self.driver.execute_script('window.scrollTo(1000,document.body.scrollHeight);')

            # 使用js的scrollIntoView函數將遮擋的元素滾動到可見屏幕上
            # scrollIntoView(true)表示將元素滾動到屏幕中間
            # scrollIntoView(false)表示將元素滾動到屏幕底部
            self.driver.execute_script("document.getElementById('choice').scrollIntoView(true);")
            self.driver.execute_script("document.getElementById('choice').scrollIntoView(false);")
            time.sleep(3)

            # 使用js的scrollBy方法,使用0和400橫縱坐標參數,
            # 將屏幕向下滾動400像素
            self.driver.execute_script('window.scrrollBy(0,400);')
            time.sleep(3)
        except Exception as e:
            print(e)

    def tearDown(self):
        self.driver.quit()


if __name__ == '__main__':
    unittest.main()

 

橫向滾動條

在web自動化中,不只只有縱向滾動條,可能還有橫線滾動條

js ="window.scrollTo(100,400);"
driver.execute_script(js)  # 第一個參數 x 是橫向距離,第二個參數 y 是縱向距離

 

 

以上方法在 Firefox 上是可以的,但是用 Chrome 瀏覽器,發現不管用。谷歌瀏覽器就是這么任性,不聽話,於是用以下方法解決谷歌瀏覽器滾動條的問題。

js = "var q=document.body.scrollTop=0"
driver.execute_script(js)

 

元素聚焦

雖然用上面的方法可以解決拖動滾動條的位置問題,但是有時候無法確定我需要操作的元素,這個時候我們可以先讓頁面直接跳到元素出現的位置,然后就可以操作了。同樣需要借助 JS 去實現

target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)

 

以上方法大家可以自己進行嘗試,試試哪種方法自己可以用

 


免責聲明!

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



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