在web自動化,經常會遇到頁面顯示內容太多的時候,頁面就會出現滾動條,一般有兩種方式進行下拉,一種是直接下拉到底部/頂部/中部,或者直接給定元素,直接下拉到指定元素的位置。
兩種方式的共同點:
兩種方式,都是通過selenium框架,執行js代碼的方式來實現,只是傳遞的js代碼不一樣
self.driver.execute_script(js)
第一種:自定義直接下拉到頂部或底部,根據需要進行選擇
滾動到底部:window.scrollTo(0, document.body.scrollHeight);
滾動到頁面中間:window.scrollTo(0, document.body.scrollHeight/2);
滾動到頁面頂部:window.scrollTo(0, document.body.scrollHeight/document.body.scrollHeight);
def scroll_to(self, type):
'''
移動瀏覽器的滾動條,滾動屏幕到百分比的位置
目前分為移動到末尾、移動到中間、移動到頂部。以及每次移動1/5,這種只能使用於瀏覽器的滾動條不在body里面,若有修改過滾動條的屬性,無法進行下滑
:param type:
:return:
'''
if type == 'end':
# 移動到末尾
js = "window.scrollTo(0, document.body.scrollHeight);"
elif type == 'middle':
# 移動到中間
js = "window.scrollTo(0, document.body.scrollHeight/2);"
elif type == 'top':
# 移動到頂部
js = "window.scrollTo(0, document.body.scrollHeight/document.body.scrollHeight);"
else:
# 暫時設置移動 1/5
js = "window.scrollTo(0, document.body.scrollHeight/5);"
try:
self.driver.execute_script(js)
except Exception as e:
mylog.exception("scroll_to_移動屏幕到{0}失敗,請檢查{1}".format(type, e))
self.save_imgs(model=type)
raise
這種下滑方式在滾動條在body里面的時候,進行下滑會沒響應
滾動條不在body里面,這個時候,執行下滑是正常的

當滾動條在body里面的時候,下滑操作就沒反應了,這個時候,可以指定元素的位置,進行下滑操作

第二種:給定元素的位置,下滑到該元素的位置(建議使用!)
try:
self.driver.execute_script("arguments[0].scrollIntoView();", sroll_element)
except Exception as e:
mylog.exception("{0}_進行滾動屏幕_到{1}元素失敗,請檢查{2}".format(model, loc, e))
self.save_imgs(model)
raise
