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中利用函数装饰器实现备忘功能
Mar 30 Python
python语言中with as的用法使用详解
Feb 23 Python
python实现简单神经网络算法
Mar 10 Python
python+POP3实现批量下载邮件附件
Jun 19 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
利用Python半自动化生成Nessus报告的方法
Mar 19 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
Python&&GDAL实现NDVI的计算方式
Jan 09 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
Jan 05 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
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
smarty表格换行实例
2014/12/15 PHP
php实现用户登陆简单实例
2017/04/04 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
纯JAVASCRIPT图表动画插件Highcharts Examples
2011/04/16 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
Vue 引入AMap高德地图的实现代码
2019/04/29 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
js 函数性能比较方法
2020/08/24 Javascript
js实现购物车商品数量加减
2020/09/21 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
[12:21]VICI vs TNC (BO3)
2018/06/07 DOTA
Python中使用PDB库调试程序
2015/04/05 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
Python引用计数操作示例
2018/08/23 Python
Django框架封装外部函数示例
2019/05/28 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
成龙洗发水广告词
2014/03/14 职场文书
中国好声音广告词
2014/03/18 职场文书
旺仔牛奶广告词
2014/03/20 职场文书
副总经理任命书
2014/06/05 职场文书
2014最新房贷收入证明范本
2014/09/12 职场文书
志愿者事迹材料
2014/12/26 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
《女娲补天》教学反思
2016/02/20 职场文书