Selenium及python实现滚动操作多种方法


Posted in Python onJuly 21, 2020

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,会自动定位到元素。

Selenium及python实现滚动操作多种方法

代码块

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自己写的方法二)一致,工具给我们做了封装。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python自动化测试之setUp与tearDown实例
Sep 28 Python
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
Jun 12 Python
python的变量与赋值详细分析
Nov 08 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
用python3读取python2的pickle数据方式
Dec 25 Python
如何基于Python实现数字类型转换
Feb 07 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
Python把图片转化为pdf代码实例
Jul 28 Python
python产生模拟数据faker库的使用详解
Nov 04 Python
python中操作文件的模块的方法总结
Feb 04 Python
如何在mac版pycharm选择python版本
Jul 21 #Python
python如何变换环境
Jul 21 #Python
零基础学Python之前需要学c语言吗
Jul 21 #Python
Python常驻任务实现接收外界参数代码解析
Jul 21 #Python
python中np是做什么的
Jul 21 #Python
从python读取sql的实例方法
Jul 21 #Python
python3.7调试的实例方法
Jul 21 #Python
You might like
PHPnow安装服务[apache_pn]失败的问题的解决方法
2010/09/10 PHP
PHP采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
php获取目录中所有文件名及判断文件与目录的简单方法
2017/03/04 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
JS 自动安装exe程序
2008/11/30 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
Node调用Java的示例代码
2017/09/20 Javascript
JavaScript实现创建自定义对象的常用方式总结
2018/07/09 Javascript
关于vue状态过渡transition不起作用的原因解决
2019/04/09 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
记录Django开发心得
2014/07/16 Python
python保留小数位的三种实现方法
2020/01/07 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
Django实现celery定时任务过程解析
2020/04/21 Python
Python和Bash结合在一起的方法
2020/11/13 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
自我评价格式
2014/01/06 职场文书
酒店总经理欢迎词
2014/01/08 职场文书
幼儿教师考核制度
2014/01/25 职场文书
计算机求职信
2014/07/02 职场文书
单位在职证明书
2014/09/11 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
五一晚会主持词
2015/07/01 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
简述Java中throw-throws异常抛出
2021/08/07 Java/Android
python开发制作好看的时钟效果
2022/05/02 Python
MySql数据库 查询时间序列间隔
2022/05/11 MySQL