Python UI自动化-Selenium【JS操作】


前言

在selenium定位元素操作中,如果有些元素定位不到,或者页面元素的属性有需要修改,可以通过js操作来对html页面元素获取、元素属性获取、元素的属性进行修改


一、JS执行方式

selenium当中执行js代码有两种方式:
1、driver.execute_script(js代码(语句用;隔开),传入js代码当中的值)

#页面滚动到可滑动最大高度
driver.execute_script("window.scrollTo(0,document.body.scrollHeight)")

2、使用selenium找到的元素对象,可以传递给js代码
js - argument 对象:js代码中使用arguments来接收参数,可以理解是个列表,通过下标取值,从0开始,根据参数的位置

#js代码中使用arguments来接收参数,可以理解是个列表,通过下标取值,从0开始,根据参数的位置
ele_input = driver.find_element(By.ID,"kw")
ele_button = driver.find_element(By.ID,"su")

js_code = 'arguments[0].value="";' \
          'arguments[1].click()'
driver.execute_script(js_code,ele_input,ele_button)

二、常用方法举例

1、js操作滚动条

  1. 设置滚动条位置,距离顶部xxx像素
driver.execute_script("document.documenElement.scrollTop=xx")
  1. 滑动到指定坐标位置
  • 1、X轴:网页左上角,从左到右越来越大
  • 2、Y轴:网页左上角,从上到下越来越大
#滑动到页面顶部
driver.execute_script("window.scrollTo(0,0)")
  1. 基于当前位置滑动指定像素距离
driver.execute_script("window.scrollBy(0,0)")
  1. 获取滚动条可滑动最大宽度
driver.execute_script("document.body.scrollWidth")
  1. 获取滚动条可滑动最大高度
driver.execute_script("document.body.scrollHeight")
  1. 获取当前滚动距离最上方的距离(垂直方向)
driver.execute_script("document.documentElement.scrollTop")
  1. 获取当前滚动距离最左侧的距离(水平方向)
driver.execute_script("document.documentElement.scrollLeft")

2、页面需要手动将元素滚到可见区域

两种方式

  1. 使用webelement自带的滚动到可见区域的属性
ele.location_once_scrolled_into_view #元素与窗口顶端对齐
  1. js的方法
    arguments[0].scrollIntoView(true) #元素与窗口顶端对齐
    arguments[0].scrollIntoView(false) #元素与窗口底端对齐
#与窗口顶端对齐,只要元素在页面就可以用,不管元素所属哪个滚动条
driver.execute_script("arguments[0].scrollIntoView(true)",elem)
#与窗口底部对齐,只要元素在页面就可以用,不管元素所属哪个滚动条
driver.execute_script("arguments[0].scrollIntoView(false)",elem)

参数说明
scrollIntoView是一个与页面(容器)滚动相关的API
element.scrollIntoView() 参数默认为true
参数为true:调用该函数,页面发送滚动,使element的顶部与视图(容器)顶部对齐
参数为false:使element的底部与视图(容器)底部对齐

3、js点击

driver.execute_script("arguments[0].click();",element)

4、js修改value属性值

driver.execute_script("arguments[0].value = arguments[1].value",ele1,value)

扩展

如果鼠标从页面上某元素移开,弹出的元素内容就整个消失了,无法查看其对应的HTML来定位元素,可使用f12-控制台中冻结弹窗

//表示在 5000毫秒后,执行debugger命令。执行该命令会浏览器会进入debug状态。
//debug状态有个特性,界面被冻住,不管我们怎么点击界面都不会触发事件。
setTimeout(function(){debugger},5000)

注意

接收js执行之后的返回值,js代码中要写return

driver.execute_script("return document.getElementById('Input').value")
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值