Python+Selenium4自动化之JS属性
应用场景
在自动化中, 能对JS代码进行增、删、改的话,可以帮助我们解决很多问题,
如:修改<a>标签的target属性,让它不打开新的窗口(_blank),从而不用频繁使用switch_to进行窗口之间的切换。
如:日期的输入框被锁定无法直接输入,需要点开日历控件后,从日历控件上点击日期,这时就可以删除日期控件元素中限制输入的属性(readonly)后直接输入日期。
使用JS修改HTML元素,是在浏览器解析后将其删除或添加,源码不会改变。
基本使用
使用JS定位
JS的定位,可以使用Id \Class(类名)\TagName(标签)来定位元素,两者在使用上有点不同
- 使用ID定位时,定位到的是单个对象
- 使用CLASS和TagName定位的时候,返回的是复数对象(类似于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属性的更多相关文章
- python UI自动化之js操作
js处理iframe无需先切换到iframe上,再切回来操作.它可以在iframe上和主页面上来回自由操作. switch方法需要先切换到iframe上,操作完之后又的切换回来(很容易忘记切换回来), ...
- python UI自动化之JS定位
1.话不多说,直接贴入代码 上面的 document.getElementById 可以替换成别的定位方式,比如: 通过name获取:document.getElementsByName 通过标签获取 ...
- 【Python + Selenium】之JS定位总结
感谢:小琰子 Python+Selenium 脚本中的一些js的用法汇总: 1.滚动条 driver.set_window_size(500,500) js = "window.scroll ...
- python接口自动化(十)--post请求四种传送正文方式(详解)
简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...
- python接口自动化-Cookie_绕过验证码登录
前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...
- Workbench利用Python驱动DM执行Js进行建模
Workbench的工作平台下可以利用Python进行一些操作,包括添加system和component等等.DM可以通过执行Jscript脚本进行自动建模,因此,结合这两块的内容,可以利用Pytho ...
- python接口自动化28-requests-html爬虫框架
前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...
- python selenium自动化点击页面链接测试
python selenium自动化点击页面链接测试 需求:现在有一个网站的页面,我希望用python自动化的测试点击这个页面上所有的在本窗口跳转,并且是本站内的链接,前往到链接页面之后在通过后退返回 ...
- python接口自动化-参数化
原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ...
- python接口自动化4-绕过验证码登录(cookie)
前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...
随机推荐
- 用OLED屏幕播放视频(3): 使用cuda编程加速视频处理
下面的系列文章记录了如何使用一块linux开发扳和一块OLED屏幕实现视频的播放: 项目介绍 为OLED屏幕开发I2C驱动 使用cuda编程加速视频处理 这是此系列文章的第3篇, 主要总结和记录了如何 ...
- daemonset应用创建了,但是没有pod被调度起来
环境: k8s版本1.25.2 一个master 两个node节点 集群节点全部允许调度(无污点),且资源充足. 操作系统版本: Ubuntu22.01 排查思路: 查看kubelet 日志,和c ...
- DB2---创建返回结果集的函数
在数据验证中,经常遇到需返回结果集的操作,故整理一个返回结果集的DB2函数,便于后期查阅 1.准备测试表 /*创建测试表:设置结果集的属性为表字段*/ CREATE TABLE Test_EXWAST ...
- MySQL系列之——索引作用、索引的种类、B树、聚簇索引构建B树、辅助索引(S)构建B+树、辅助索引细分、索引树的高度、索引的基本管理、执行计划获取及分析、索引应用规范、优化器针对索引、问题汇总
文章目录 一 索引作用 二 索引的种类(算法) 三 B树 基于不同的查找算法分类介绍 B 树 B+树 B*树 四 在功能上的分类 4.1 聚簇索引构建B树(簇就是区) 4.1.1 前提 4.1.2 作 ...
- Redis系列之——Redis介绍安装配置
文章目录 第一章 redis初识 1.1 Redis是什么 1.2 Redis特性(8个) 1.3 Redis单机安装 1.3.1下载安装 1.3.2三种启动方式 1.3.2.1 最简启动 1.3.2 ...
- python第2~5章 code
02基本语法 print('he\aaa\aaa') # 这是一个打印语句,请你看见了不要慌张# 这是一个注释# 注释会被解释器所忽略# print(123+456) 这行代码被注释了,将不会执行pr ...
- Qt信号槽与事件循环学习笔记
事件与事件循环 信号槽机制 事件与事件循环 在Qt中,事件(event)被封装为QEvent类/子类对象,用来表示应用内部或外部发生的各种事情.事件可以被任何QObject子类的对象接收并处理. 根据 ...
- 用go封装和实现扫码登录
用go封装和实现扫码登录 本篇为用go设计开发一个自己的轻量级登录库/框架吧 - 秋玻 - 博客园 (cnblogs.com)的扫码登录业务篇,会讲讲扫码登录的实现,给库/框架增加新的功能,最后说明使 ...
- [ABC212E] Safety Journey 题解
Safety Journey 题目大意 给定一张缺少了 \(m\) 条边的 \(n\) 个点的完全图和一个正整数 \(k\),你需要求出满足以下条件的序列 \(A\) 的数量: \(A\) 的长度为 ...
- js数据结构--散列表
<!DOCTYPE html> <html> <head> <title></title> </head> <body&g ...