python中selenium操作下拉滚动条的几种方法汇总


Posted in Python onJuly 14, 2019

UI自动化中经常会遇到元素识别不到,找不到的问题,原因有很多,比如不在iframe里,xpath或id写错了等等;但有一种是在当前显示的页面元素不可见,拖动下拉条后元素就出来了。

比如下面这样一个网页,需要进行拖动下拉条后才能通过selenium找到密码输入框的元素,

python中selenium操作下拉滚动条的几种方法汇总

python中selenium操作下拉滚动条的几种方法汇总

在python中有几种方法解决这种问题,简单介绍下,给需要的人:

方法一)使用js脚本直接操作,方法如下:

js="var q=document.getElementById('id').scrollTop=10000"
driver.execute_script(js)

或:

js="var q=document.documentElement.scrollTop=10000"
driver.execute_script(js)

这里的id为滚动条的id,但js中没有xpath的方法,所以滚动条没有id的网页此方法不适用

方法二)使用js脚本拖动到提定地方

target = driver.find_element_by_id("id_keypair")
driver.execute_script("arguments[0].scrollIntoView();", target) #拖动到可见的元素去

这个方法可以将滚动条拖动到需要显示的元素位置,此方法用途比较广,可以使用

方法三)根据页面显示进行变通,发送tab键

在本例中的页面中,密码是输入框,正常手工操作时,可以通过tab键会切换到密码框中,所以根据此思路,在python中也可以发送tab键来切换,使元素显示

from selenium.webdriver.common.keys import Keys
driver.find_element_by_id("id_login_method_0").send_keys(Keys.TAB)

update

前段时间使用robotframe work框架时,selenium2library里面有一个非常好用的功能Focus,会自动定位到元素,研读一下源码:

def focus(self, locator):
    """Sets focus to element identified by `locator`."""
    element = self._element_find(locator, True, True)
    self._current_browser().execute_script("arguments[0].focus();", element)

从源码中我们可以看到,此方法与我们在python自己写的方法二)一致,工具给我们做了封装。

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

Python 相关文章推荐
详解Python的Django框架中Manager方法的使用
Jul 21 Python
Python中关键字nonlocal和global的声明与解析
Mar 12 Python
python实现SOM算法
Feb 23 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
python 不以科学计数法输出的方法
Jul 16 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
python两个_多个字典合并相加的实例代码
Dec 26 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
Jan 06 Python
深入分析python 排序
Aug 24 Python
python scipy 稀疏矩阵的使用说明
May 26 Python
python使用pymysql模块操作MySQL
Jun 16 Python
Python+Selenium使用Page Object实现页面自动化测试
Jul 14 #Python
Python实现Selenium自动化Page模式
Jul 14 #Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 #Python
python基于Selenium的web自动化框架
Jul 14 #Python
Django项目使用CircleCI的方法示例
Jul 14 #Python
Python实现最常见加密方式详解
Jul 13 #Python
python Pandas库基础分析之时间序列的处理详解
Jul 13 #Python
You might like
php二维数组排序方法(array_multisort usort)
2013/12/25 PHP
php编写的一个E-mail验证类
2015/03/25 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
2015/07/02 PHP
利用 fsockopen() 函数开放端口扫描器的实例
2017/08/19 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
js关闭子窗体刷新父窗体实现方法
2012/12/04 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
网页运行时提示对象不支持abigimage属性或方法
2014/08/10 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
浅谈js中变量初始化
2015/02/03 Javascript
JQuery中绑定事件(bind())和移除事件(unbind())
2015/02/27 Javascript
javascript中innerText和innerHTML属性用法实例分析
2015/05/13 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
jQuery插件dataTables添加序号列的方法
2016/07/06 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
原生JS实现导航下拉菜单效果
2020/11/25 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
javascript删除数组元素的七个方法示例
2019/09/09 Javascript
js实现抽奖功能
2020/11/24 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
python读取浮点数和读取文本文件示例
2014/05/06 Python
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
Python实现多条件筛选目标数据功能【测试可用】
2018/06/13 Python
python生成密码字典的方法
2018/07/06 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
python验证码图片处理(二值化)
2019/11/01 Python
python判断是空的实例分享
2020/07/06 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
防沙治沙典型材料
2014/05/07 职场文书
公共机构节能宣传周活动总结
2014/07/09 职场文书
导游词之京东大峡谷旅游区
2019/10/29 职场文书