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实现爬取知乎神回复简单爬虫代码分享
Jan 04 Python
详解Python中的各种函数的使用
May 24 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
python统计字母、空格、数字等字符个数的实例
Jun 29 Python
CentOS7安装Python3的教程详解
Apr 10 Python
python3.6编写的单元测试示例
Aug 17 Python
Python imageio读取视频并进行编解码详解
Dec 10 Python
浅谈matplotlib中FigureCanvasXAgg的用法
Jun 16 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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投票程序源码
2007/03/11 PHP
PHP环境中Memcache的安装和使用
2015/11/05 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
2015/12/07 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
2015/12/17 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
php命令行模式代码实例详解
2021/02/26 PHP
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
js下拉选择框与输入框联动实现添加选中值到输入框的方法
2015/08/17 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
JavaScript lodash常见用法系列小结
2016/08/24 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
js回调函数仿360开机
2019/12/26 Javascript
JS实现轮播图效果
2020/01/11 Javascript
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
简单了解python中的f.b.u.r函数
2019/11/02 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
资深生产主管自我评价
2013/09/22 职场文书
大三自我鉴定范文
2013/10/05 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
项目备案申请报告
2015/05/15 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
详解Python+OpenCV绘制灰度直方图
2022/03/22 Python