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快速排序代码实例
Nov 21 Python
python进阶教程之异常处理
Aug 30 Python
基于Python Shell获取hostname和fqdn释疑
Jan 25 Python
浅析Python中的for 循环
Jun 09 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
基于Python socket的端口扫描程序实例代码
Feb 09 Python
Python数据抓取爬虫代理防封IP方法
Dec 23 Python
python 求10个数的平均数实例
Dec 16 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
Python之变量类型和if判断方式
May 05 Python
Python截图并保存的具体实例
Jan 14 Python
python中HTMLParser模块知识点总结
Jan 25 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
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
2017/03/25 PHP
yii框架redis结合php实现秒杀效果(实例代码)
2017/10/26 PHP
网页里控制图片大小的相关代码
2006/06/13 Javascript
通过javascript设置css属性的代码
2009/12/28 Javascript
JQuery 构建客户/服务分离的链接模型中Table分页代码效率初探
2010/01/22 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
JavaScript加强之自定义event事件
2013/09/21 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
使用js实现按钮控制文本框加1减1应用于小时+分钟
2013/12/09 Javascript
javascript实现自动输出文本(打字特效)
2015/08/27 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
Python写的一个简单监控系统
2015/06/19 Python
Python中顺序表的实现简单代码分享
2018/01/09 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
python3使用matplotlib绘制散点图
2019/03/19 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
Django模板Templates使用方法详解
2019/07/19 Python
python3发送request请求及查看返回结果实例
2020/04/30 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
职工运动会邀请函
2014/02/02 职场文书
环保倡议书范文
2014/05/12 职场文书
质量承诺书格式
2014/05/20 职场文书
积极向上的团队口号
2014/06/06 职场文书
四则混合运算教学反思
2016/02/23 职场文书
Mysql中调试存储过程最简单的方法
2021/06/30 MySQL