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

常见场景:

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

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

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

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

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

一、JavaScript简介

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

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

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

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

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

http://www.w3school.com.cn/js/index.asp4

 

二、控制滚动条高度

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

八、参考代码如下:
# 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":
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)

python+selenium+js 处理滚动条的更多相关文章

  1. python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过autopy实现右键菜单和另存为操作

    1.参考 利用 Python + Selenium 自动化快速截图 利用 Python + Selenium 实现对页面的指定元素截图(可截长图元素) 使用python获取系统所有进程PID以及进程名 ...

  2. selenium - Js处理滚动条操作

    # 11.Js处理滚动条操作 driver.execute_script('arguments[0].scrollIntoView();',target) target 为find_element_b ...

  3. 【滚动条】Selenium+python自动化-JS处理滚动条

    转载地址: http://www.cnblogs.com/yoyoketang/p/6128655.html --------------------------------------------- ...

  4. python + selenium + Js 处理轮动条

    selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候需要借 ...

  5. Selenium3+python自动化 -JS处理滚动条

    selenium并不是万能的,有时候页面上操作无法实现的,这时候就需要借助JS来完成了. 常见场景: 当页面上的元素超过一屏后,想操作屏幕下方的元素,是不能直接定位到,会报元素不可见的. 这时候需要借 ...

  6. python+selenium之浏览器滚动条操作

    from selenium import webdriver import time #访问百度 driver=webdriver.Ie() driver.get("http://www.b ...

  7. Python+Selenium - js操作

    js操作:日期框 本部分涉及两个知识点:DOM树和js DOM树教程链接: https://www.w3school.com.cn/htmldom/index.asp js教程链接 https://w ...

  8. python+Selenium之操作滚动条

    当我们做测试的时候,如果页面过长,就会定位元素失败,这时可以使用move_to_element方法跳到该元素的位置再操作: from selenium.webdriver.common.action_ ...

  9. 自动化测试基础篇--Selenium中JS处理滚动条

    摘自https://www.cnblogs.com/sanzangTst/p/7692285.html 前言 什么是JS? JS就是JavaScript: JavaScript 是世界上最流行的脚本语 ...

随机推荐

  1. Tiny4412 LED 程序

    package cn.hyc.led; import android.os.Bundle; import android.app.Activity; import android.view.Menu; ...

  2. 阻塞 , 非阻塞 , 同步 ,异步 , I/O模型

    •阻塞,非阻塞:进程/线程要访问的数据是否就绪,进程/线程是否需要等待: •同步,异步:访问数据的方式,同步需要主动读写数据,在读写数据的过程中还是会阻塞:异步只需要I/O操作完成的通知,并不主动读写 ...

  3. OSI参考模型和TCP/IP参考模型

  4. HTML5拖拽表格中单元格间的数据库

    效果图:

  5. 【Python】爬虫与反爬虫大战

    爬虫与发爬虫的厮杀,一方为了拿到数据,一方为了防止爬虫拿到数据,谁是最后的赢家? 重新理解爬虫中的一些概念 爬虫:自动获取网站数据的程序反爬虫:使用技术手段防止爬虫程序爬取数据误伤:反爬虫技术将普通用 ...

  6. bzoj1143-祭祀

    题目 给出一个有向无环图,要在上面安放祭祀点.两个祭祀点必须不可达,求最多能安放多少个祭祀点. 分析 由于一条无法再延伸链上只能安放一个祭祀点,而我们要求的是最多能安放祭祀点的个数,所以要求的就是最长 ...

  7. NAT穿透(UDP打洞)

    1.NAT(Network Address Translator)介绍 NAT有两大类,基本NAT和NAPT. 1.1.基本NAT 静态NAT:一个公网IP对应一个内部IP,一对一转换 动态NAT:N ...

  8. OI入门

    学习顺序: 1.高精度计算: 高精度计算(一) 高精度计算练习1 高精度计算(二) 高精度计算练习2 2.递推 3.递归 递归算法 递归练习 4.搜索与回溯 搜索与回溯算法(一) 搜索与回溯练习(一) ...

  9. BZOJ2002:[HNOI2010]弹飞绵羊——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2002 https://www.luogu.org/problemnew/show/P3203 某天, ...

  10. 关于PDO取得结果集的数据类型为string的问题

    很久没写些什么了, 正好今天工作中遇到了以前在意过的问题. 之前曾注意到过,php从数据库中取得的结果集后,其中的字段全都会变成string类型.今儿通过ajax调取数据, 有一个type字段是int ...