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实现根据ip地址反向查找主机名称的方法
Apr 29 Python
Python的string模块中的Template类字符串模板用法
Jun 27 Python
简单实现python画圆功能
Jan 25 Python
django 修改server端口号的方法
May 14 Python
Python实现的读写json文件功能示例
Jun 05 Python
Django forms表单 select下拉框的传值实例
Jul 19 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
Python爬虫设置ip代理过程解析
Jul 20 Python
利用python查看数组中的所有元素是否相同
Jan 08 Python
python数据抓取3种方法总结
Feb 07 Python
python 爬取京东指定商品评论并进行情感分析
May 27 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
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
php生成静态页面的简单示例
2014/04/17 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
jquery下为Event handler传递动态参数的代码
2011/01/06 Javascript
基于jquery点击自以外任意处,关闭自身的代码
2012/02/10 Javascript
jquery中加载图片自适应大小主要实现代码
2013/08/23 Javascript
Javascript全局变量var与不var的区别深入解析
2013/12/09 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
AngularJs Scope详解及示例代码
2016/09/01 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
基于VUE实现简单的学生信息管理系统
2021/01/13 Vue.js
Python实现的飞速中文网小说下载脚本
2015/04/23 Python
使用Python对IP进行转换的一些操作技巧小结
2015/11/09 Python
怎样使用Python脚本日志功能
2016/08/14 Python
Python编程之event对象的用法实例分析
2017/03/23 Python
python机器学习之神经网络(二)
2017/12/20 Python
Python用5行代码写一个自定义简单二维码
2018/10/21 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
pandas数据筛选和csv操作的实现方法
2019/07/02 Python
迎新晚会邀请函
2014/02/01 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
安全生产演讲稿
2014/05/09 职场文书
运动员加油词
2015/07/18 职场文书
Nginx代理同域名前后端分离项目的完整步骤
2021/03/31 Servers
解决golang post文件时Content-Type出现的问题
2021/05/02 Golang