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 相关文章推荐
17个Python小技巧分享
Jan 23 Python
python文件特定行插入和替换实例详解
Jul 12 Python
Python实现发送QQ邮件的封装
Jul 14 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
Django中ORM表的创建和增删改查方法示例
Nov 15 Python
python+influxdb+shell编写区域网络状况表
Jul 27 Python
Python笔记之观察者模式
Nov 20 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
Feb 15 Python
keras实现VGG16 CIFAR10数据集方式
Jul 07 Python
Pycharm2020.1安装无法启动问题即设置中文插件的方法
Aug 07 Python
总结三种用 Python 作为小程序后端的方式
May 02 Python
python+opencv实现目标跟踪过程
Jun 21 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
php购物网站支付paypal使用方法
2010/11/28 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
PHP与SQL语句常用大全
2016/12/10 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
js实现DIV的一些简单控制
2007/06/04 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
javascript addBookmark 加入收藏 多浏览器兼容
2009/08/15 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
JQuery 又谈ajax局部刷新
2017/11/27 jQuery
Vue中this.$router.push参数获取方法
2018/02/27 Javascript
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
ES6基础之数组和对象的拓展实例详解
2019/08/22 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
node.js如何根据URL返回指定的图片详解
2020/10/21 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
python3调用R的示例代码
2018/02/23 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
2019/07/25 Python
Django url,从一个页面调到另个页面的方法
2019/08/21 Python
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
介绍一下Java中的static关键字
2012/05/12 面试题
个人自我鉴定
2013/11/07 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
行政处罚告知书
2015/07/01 职场文书
学术会议领导致辞
2015/07/29 职场文书
高三数学复习备考教学反思
2016/02/18 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA