web自动化,下拉滚动到底部/顶部和下拉滚动到指定的元素

在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

  

 

posted on 2021-07-09 13:46  刚刚好1  阅读(2120)  评论(0编辑  收藏  举报

导航