应用场景

在自动化中, 能对JS代码进行增、删、改的话,可以帮助我们解决很多问题,

如:修改<a>标签的target属性,让它不打开新的窗口(_blank),从而不用频繁使用switch_to进行窗口之间的切换。

如:日期的输入框被锁定无法直接输入,需要点开日历控件后,从日历控件上点击日期,这时就可以删除日期控件元素中限制输入的属性(readonly)后直接输入日期。

使用JS修改HTML元素,是在浏览器解析后将其删除或添加,源码不会改变。

基本使用

使用JS定位

JS的定位,可以使用Id \Class(类名)\TagName(标签)来定位元素,两者在使用上有点不同

  • 使用ID定位时,定位到的是单个对象
  • 使用CLASSTagName定位的时候,返回的是复数对象(类似于elements的复数定位),使用的时候需要用 [下标] 指定要第几个对象
# 通过ID定位
'document.getElementById("ID值")' # 通过CLASS定位 ->class有多个值的话用空格格开
'document.getElementsByClassName("Class值")[下标]' # 通过TagName定位
'document.getElementsByTagName("标签名")[下标]' # 通过CSS定位
# 定位百度首页的"地图" ->要注意嵌套的引号要使用 \\ 标记
'document.querySelector("div[id=\\"s-top-left\\"]>a[href=\\"http://map.baidu.com\\"]") # 使用querySelectorAll的话就变成返回列表就要加上 [下标]

JS进行的操作()

# 增加属性 并 赋值
'.setAttribute("要增加的属性","要赋的值")'
# 删除属性
'.removeAttribute("属性名")'
# 获得属性的值
'.getAttributte("属性名")'
# 修改属性值
'.属性名="值"'

运行

调用Selenium的方法execute_scripts(定位)在浏览器中执行JavaScript代码(使用引号包裹)

# 基础使用 删除ID值为'top'的标签,的title属性
'document.getElementById("top").removeAttribute("title")' # 返回top的文本
'return document.getElementById("top").innerText' # 执行
driver.execute_script('document.getElementById("top").removeAttribute("title")')

使用selenium的定位方法()

我们也可以使用arguments对象,在selenium中定位之后再传入JS使用增删改操作

arguments对象包含了函数运行时的所有参数,arguments[0]就是第一个参数.

# 先使用selenium的定位方法
a =driver.find_elements(By.TAG_NAME,'a')[3] # 再传入使用js操作
driver.execute_script("arguments[0].removeAttribute('属性名')", a) # 但是不能使用下面的这种形式,会报错
a =driver.find_elements(By.TAG_NAME,'a')
driver.execute_script("arguments[3].removeAttribute('属性名')", a)

以上为个人学习记录,欢迎各位指导补充!

Python+Selenium4自动化之JS属性的更多相关文章

  1. python UI自动化之js操作

    js处理iframe无需先切换到iframe上,再切回来操作.它可以在iframe上和主页面上来回自由操作. switch方法需要先切换到iframe上,操作完之后又的切换回来(很容易忘记切换回来), ...

  2. python UI自动化之JS定位

    1.话不多说,直接贴入代码 上面的 document.getElementById 可以替换成别的定位方式,比如: 通过name获取:document.getElementsByName 通过标签获取 ...

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

    感谢:小琰子 Python+Selenium 脚本中的一些js的用法汇总: 1.滚动条 driver.set_window_size(500,500) js = "window.scroll ...

  4. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  5. python接口自动化-Cookie_绕过验证码登录

    前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...

  6. Workbench利用Python驱动DM执行Js进行建模

    Workbench的工作平台下可以利用Python进行一些操作,包括添加system和component等等.DM可以通过执行Jscript脚本进行自动建模,因此,结合这两块的内容,可以利用Pytho ...

  7. python接口自动化28-requests-html爬虫框架

    前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...

  8. python selenium自动化点击页面链接测试

    python selenium自动化点击页面链接测试 需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回 ...

  9. python接口自动化-参数化

    原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ...

  10. python接口自动化4-绕过验证码登录(cookie)

    前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...

随机推荐

  1. VB快速上手文档教程

    前言 本来我想可能不会接触到这个语言, 不过在用excel时需要用到VBA. 这就不得不专门去学习一番. 入了个门, 专门写个文档留着. 万一以后用得到呢- 论VB, 我还是初学者. 如有弄错了的地方 ...

  2. 五分钟 k8s入门到实战--跨服务调用

    背景 在做传统业务开发的时候,当我们的服务提供方有多个实例时,往往我们需要将对方的服务列表保存在本地,然后采用一定的算法进行调用:当服务提供方的列表变化时还得及时通知调用方. student: url ...

  3. LVS DR模式负载均衡群集部署

    LVS DR模式负载均衡群集部署 1 LVS-DR 模式的特点 直接路由直接路由 调节器仅作为客户端的访问入口,节点服务器的响应消息是直接返回客户端的,不需要经过调节器(与NAT模式的区别)节点服务器 ...

  4. Unity 性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法

    Unity 性能优化Shader分析处理函数:ShaderUtil.GetShaderGlobalKeywords用法 点击封面跳转下载页面 简介 Unity 性能优化Shader分析处理函数:Sha ...

  5. 二叉树(binary tree)

    二叉树(binary tree) 二叉树(Binary Tree)是一种常见的树状数据结构,它由一组节点组成,每个节点最多有两个子节点,分别称为左子节点和右子节点.二叉树具有以下特点: 每个节点最多有 ...

  6. 小札 Maximum Weight Closure of a Graph

    1. Introduction    Define a closure of a directed graph \(G=(V,E)\) as an induced set of vertexes of ...

  7. 这些负载均衡都解决哪些问题?服务、网关、NGINX

    这篇文章解答一下群友的一系列提问: 在微服务项目中,有服务的负载均衡.网关的负载均衡.Nginx的负载均衡,这几个负载均衡分别用来解决什么问题呢? 在微服务项目中,服务的负载均衡.网关的负载均衡和Ng ...

  8. Go语言系列——01-HelloWorld、02-命名规范、03-变量、04-类型、05-常量、06-函数(Function)、07-包、08-if-else语句、09-循环、10-switch语句

    文章目录 01-HelloWorld 一 建立 Go 工作区 二 运行 Go 程序 2.1 hello world 程序代码介绍 02-开发环境搭建 一 下载地址 二 安装 Linux安装 Windo ...

  9. 第一个 Go 程序"hello,world" 与 main 函数和Go常用基本命令

    第一个 Go 程序"hello,world" 与 main 函数和Go常用基本命令 目录 第一个 Go 程序"hello,world" 与 main 函数和Go ...

  10. tiptop查询通配符

    *:表示任何符合的字符,例:A*,表示要找出全部为 A 开头的资料. ?:表示任一符合的字符,例:A?,表示要找出第一码为 A,第二码为任何 字符,但总共只有二码之数据. 注:以上二功能仅可在文字字段 ...