selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了。

常见场景:

当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的。

这时候需要借助滚动条来拖动屏幕,使被操作的元素显示在当前的屏幕上。

滚动条是无法直接用定位工具来定位的。selenium里面也没有直接的方法去控制滚动条,

这时候只能借助J了,还好selenium提供了一个操作js的方法:

execute_script(),可以直接执行js的脚本。

一、JavaScript简介

1.JavaScript是世界上最流行的脚本语言,因为你在电脑、手机、平板上浏览的所有的网页,

以及无数基于HTML5的手机App,交互逻辑都是由JavaScript驱动的。简单地说,

JavaScript是一种运行在浏览器中的解释型的编程语言。

那么问题来了,为什么我们要学JavaScript?
2.有些特殊的操作selenium2+python无法直接完成的,JS刚好是这方面的强项,所以算是一个很

好的补充。对js不太熟悉的,可以网上找下教程,简单了解些即可。

http://www.runoob.com/js/js-tutorial.html

二、控制滚动条高度

1.滚动条回到顶部:

js="var q=document.getElementById(‘id‘).scrollTop=0"
driver.execute_script(js)
2.滚动条拉到底部

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

3.这里可以修改scrollTop 的值,来定位右侧滚动条的位置,0是最上面,10000是最底部。

版权所有,微信公众号:软件测试部落

三、横向滚动条
1.有时候浏览器页面需要左右滚动(一般屏幕最大化后,左右滚动的情况已经很少见了)。
2.通过左边控制横向和纵向滚动条scrollTo(x, y)js = "window.scrollTo(100,400);"

driver.execute_script(js)

3.第一个参数x是横向距离,第二个参数y是纵向距离

四、Chrome浏览器

1.以上方法在Firefox上是可以的,但是用Chrome浏览器,发现不管用。
谷歌浏览器就是这么任性,不听话,于是用以下方法解决谷歌浏览器滚动条的问题。

2.Chrome浏览器解决办法:

js = "var q=document.body.scrollTop=0"
driver.execute_script(js)

五、元素聚焦
1.虽然用上面的方法可以解决拖动滚动条的位置问题,但是有时候无法确定我需要操作的元素

在什么位置,有可能每次打开的页面不一样,元素所在的位置也不一样,怎么办呢?

2.这个时候我们可以先让页面直接跳到元素出现的位置,然后就可以操作了。同样需要借助JS去实现。
3.元素聚焦:

target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)

六、获取浏览器名称:driver.name

1.为了解决不同浏览器操作方法不一样的问题,可以写个函数去做兼容。

2.先用driver.name获取浏览器名称,然后用if语句做个判断

七、兼容性
1.兼容谷歌和firefox/IE

?
1

八、参考代码如下:

# coding:utf-8
from selenium import webdriver
driver = webdriver.Firefox()
driver.get("https://www.baidu.com")
print driver.name
# 回到顶部
def scroll_top():
if driver.name == "chrome":
js = "var q=document.body.scrollTop=0"
else:
js = "var q=document.documentElement.scrollTop=0"
return driver.execute_script(js)
# 拉到底部
def scroll_foot():
if driver.name == "chrome":
#chrome 使用该方式
js = "var q=document.body.scrollTop=10000"
else:
#其他浏览器使用这种方式
js = "var q=document.documentElement.scrollTop=10000"
return driver.execute_script(js)
# 聚焦元素
target = driver.find_element_by_xxxx()
driver.execute_script("arguments[0].scrollIntoView();", target)

 

JS功能还是很强大的,它还可以处理富文本、内嵌滚动条的问题。

转载于:https://www.cnblogs.com/Skyyj/p/7275938.html

python + selenium + Js 处理轮动条相关推荐

  1. 邢不行 | Python量化 + 数字货币 + 轮动 = 4年1000倍【附代码】

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. 年前抱团股涨的最猛的时候,很多人很焦虑. 没上车的 ...

  2. jquery.slimscroll.min.js轮动条插件

    引用: <script src="js/jquery.min.js"></script>   <script src="js/jquery. ...

  3. python时间控件readonly属性_人生苦短,我学python之python+selenium js处理日历控件(修改readonly属性)...

    转载于 上海-悠悠的博客 前言 日历控件是web网站上经常会遇到的一个场景,有些输入框是可以直接输入日期的,有些不能,以我们经常抢票的12306网站为例,详细讲解如何解决日历控件为readonly属性 ...

  4. python selenium 小知识点整理笔记(更新中...)

    1.python selenium 获取JS中返回的变量值: # 获取某节点中返回的子节点长度 clsroomNum = self.driver.execute_script("return ...

  5. 【Python + Selenium】之JS定位总结

    1.滚动条 driver.set_window_size(500,500) js = "window.scrollTo(0,200)" #左:距左边横滚.右:距上边竖滚 drive ...

  6. 抱团股会一直涨?无脑执行大小盘轮动策略,轻松跑赢指数5倍【附Python代码】

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. 前言: 巴蛇吞象,扬州跨鹤.人性之贪婪,逝者如此, ...

  7. [Tushare+Python] AH股轮动策略基础

    [Tushare+Python] AH股轮动策略基础 摘要:为做AH股轮动策略需进行基础数据处理,这里代码主要涉及AH溢价计算及相关数据清洗. 文章目录 [Tushare+Python] AH股轮动策 ...

  8. python selenium 用js删除 readonly属性

    当我们想在输入框 是日期类型,并send_keys 的时候发现不能输入,要么你搞日历这个很麻烦, 还有一个方法用js,非常简单 selenium+python操作js页面,删除某个元素 例子如下:删除 ...

  9. PYTHON SELENIUM运用execute_script(JS)选择页面下拉框在输入框输入值

    By Mejias 网上有很多教程使用SELENIUM去操作页面下拉框并选中,比如Select(web element).select_by_value(option).也有使用selenium对输入 ...

最新文章

  1. PHP全栈开发(八):CSS Ⅸ dispaly visibility
  2. Javascript数组常见的方法
  3. 【解决办法】read_csv()第一列作为index
  4. 最佳拟合直线_JAVA
  5. VTK:小部件之AngleWidget2D
  6. 1900美元,你想要机器女朋友,还是想要女朋友?
  7. 平稳序列的预测和拟合之单位根检验
  8. (59)FPGA面试题-什么是有限的状态机?有限状态机可分为几类,分别是什么?
  9. 算法导论6:排序小结和最值取法 2016.1.6
  10. C语言判断四个嫌疑犯问题,C语言谁是窃贼问题代码及解析
  11. (ECCV-2020)步态横向网络-GLN
  12. 不同时区时间换算_世界时区划分时差在线查询计算_时间换算器
  13. Docker基础25--5.6 配置docker远程服务
  14. 移动GIS开发:手机基站定位+离线切片地图(矢量vtpk+栅格tpk)导航安卓APP
  15. struck(结构化SVM用于视觉跟踪)--源代码详解--main.cpp
  16. Beta冲刺第二周王者荣耀交流协会第五次会议
  17. d3.js v5 数据加载
  18. java中Date的getTime()函数
  19. vue移动端使用手势库---alloytinger
  20. golang学习之 go 读写 txt

热门文章

  1. python三元表达式
  2. android-远程图片获取和本地缓存
  3. 2006年4月计算机等级考试二级Java笔试答案
  4. unused import statement
  5. hadoop的三大核心组件之HDFS和YARN
  6. colab文件夹上传到github
  7. linux下面安装Matlab2017b、快捷键修改、修改背景颜色(转载+自己整理)
  8. python之setdefault()和defaultdict()处理缺失值的键
  9. OpenCV学习笔记十:hough变换
  10. 数学狂想曲(五)——概率分布(2), 自相关互相关卷积