在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