Selenium及python實現滾動操作多種方法
selenium並不是萬能的,有時候頁面上操作無法實現的,這時候就需要藉助JS來完成了。
當頁面上的元素超過一屏後,想操作螢幕下方的元素,是不能直接定位到,會報元素不可見的。
這時候需要藉助滾動條來拖動螢幕,使被操作的元素顯示在當前的螢幕上。滾動條是無法直接用定位工具來定位的。
selenium裡面也沒有直接的方法去控制滾動條,這時候只能藉助J了,還好selenium提供了一個操作js的方法:execute_script(),可以直接執行js的指令碼。
方法一:使用js指令碼直接操作
# 滾動到頂部 def scroll_top(self): if self.driver.name == "Chrome": js = "var q=document.body.scrollTop=0" else: js = "var q=document.documentElement.scrollTop=0" return self.driver.execute_script(js) # 滾動到底部 def scroll_foot(self): if self.driver.name == "Chrome": js = "var q=document.body.scrollTop=1000" else: js = "var q=document.documentElement.scrollTop=1000" return self.driver.execute_script(js)
或者:
js="var q=document.getElementById('***').scrollTop=10000"
driver.execute_script(js)
這裡的id為滾動條的id,但js中沒有xpath的方法,所以滾動條沒有id的網頁此方法不適用
上面展示的是上下方向的滾動條,接下來介紹左右方向的滾動條的操作方法
#左右方向的滾動條可以使用window.scrollTo(左邊距,上邊距)方法
#example
js="window.scrollTo(200,1000)"
driver.execute_script(js)
方法二:使用 js 指令碼拖動到指定位置
target = driver.find_element_by_id("***")
driver.execute_script("arguments[0].scrollIntoView();",target) #拖動到可見的元素去
該方法可以將滾動條拖動到需要顯示的元素位置,此方法用途比較廣
方法三:根據頁面顯示進行變通,傳送tab鍵
比如,密碼是輸入框,正常手工操作時,可以通過tab鍵會切換到密碼框中,所以根據此思路,在python中也可以傳送tab鍵來切換,使元素顯示
from selenium.webdriver.common.keys import Keys
driver.find_element_by_id("****").send_keys(Keys.TAB)
方法四:
scrollTo函式
--scrollHeight 獲取物件的滾動高度。
--scrollLeft 設定或獲取位於物件左邊界和視窗中目前可見內容的最左端之間的距離。
--scrollTop 設定或獲取位於物件最頂端和視窗中可見內容的最頂端之間的距離。
--scrollWidth 獲取物件的滾動寬度
#滾動到底部 js = "window.scrollTo(0,document.body.scrollHeight)" driver.execute_script(js) #滾動到頂部 js = "window.scrollTo(0,0)" driver.execute_script(js)
其他:
robotframe work框架中,selenium2library裡面有一個非常好用的功能Focus,會自動定位到元素。
程式碼塊
driver.find_element_by_xpath("//div[@id='search']/div/span/input").click() target = driver.find_element_by_id("_easyui_tree_17") driver.execute_script("arguments[0].scrollIntoView();",target) #拖動到可見的元素去 driver.find_element_by_xpath("//span[@class='tree-title'][text()='專業測試.修改後/123456']").click()
此方法與我們在python自己寫的方法二)一致,工具給我們做了封裝。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。