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基础教程之Hello World!
Aug 29 Python
在Python的struct模块中进行数据格式转换的方法
Jun 17 Python
利用Python爬取可用的代理IP
Aug 18 Python
python用户评论标签匹配的解决方法
May 31 Python
Python WSGI的深入理解
Aug 01 Python
Python中的CSV文件使用"with"语句的方式详解
Oct 16 Python
Python3中关于cookie的创建与保存
Oct 21 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
Dec 25 Python
keras训练浅层卷积网络并保存和加载模型实例
Jul 02 Python
python实现学生通讯录管理系统
Feb 25 Python
在Python 中将类对象序列化为JSON
Apr 06 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正则替换处理HTML页面的方法
2015/06/17 PHP
浅谈Laravel中的三种中间件的作用
2019/10/13 PHP
YII2框架中actions的作用与使用方法示例
2020/03/13 PHP
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
ie支持function.bind()方法实现代码
2012/12/27 Javascript
实现动画效果核心方式的js代码
2013/09/27 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
javascript将list转换成树状结构的实例
2017/09/08 Javascript
vue移动端html5页面根据屏幕适配的四种解决方法
2018/10/19 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python list操作用法总结
2015/11/10 Python
python目录与文件名操作例子
2016/08/28 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python3解决棋盘覆盖问题的方法示例
2017/12/07 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
对pyqt5之menu和action的使用详解
2019/06/20 Python
python实现银行管理系统
2019/10/25 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
python常量折叠基础知识点讲解
2021/02/28 Python
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
运动会广播稿200字
2014/01/15 职场文书
九年级语文教学反思
2014/02/04 职场文书
运动会稿件100字
2014/02/21 职场文书
八一建军节演讲稿
2014/09/10 职场文书
会计工作态度自我评价
2015/03/06 职场文书
闪闪红星观后感
2015/06/08 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
Vue操作Storage本地化存储
2022/04/29 Vue.js
HTML 里 img 元素的 src 和 srcset 属性的区别详解
2023/05/21 HTML / CSS