首页 > 编程语言 >Python+Selenium4自动化之JS属性

Python+Selenium4自动化之JS属性

时间:2023-12-26 21:11:20浏览次数:46  
标签:定位 Python top JS Selenium4 使用 document 属性

 应用场景

在自动化中, 能对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,top,JS,Selenium4,使用,document,属性
From: https://www.cnblogs.com/Zshucan/p/17929366.html

相关文章

  • 【OpenCV】【Python】关于cv2.findContours()轮廓索引(编号)解析(RETR_TREE)
    在打算自己实现二维码的定位的时候,看到了相关博文的关于cv2.findContours返回的层级信息来定位三个“回”字从而达到定位二维码的目的,但是返回的hierarchy中的层级信息分别对应的是哪个轮廓却困扰了许久,查阅了很多资料最后还是自己手动找出了清晰的规律。关于hierarchy返......
  • python tkinter 使用(七)
    pythontkinter使用(七)本篇文章主要讲下tkinter中的message控件.Message控件可以用于在窗口中显示一段文本消息.以下是个简单的例子:#!/usr/bin/python3#-*-coding:UTF-8-*-"""@Author:zh@Time2023/11/24上午11:38.@Email:@Describe:"""fromtkinte......
  • python tkinter使用(九)
    pythontkinter使用(九)本文主要讲下scrolledText中图片的插入,以及常见的错误.使用Image.open来打开图片使用ImageTk.PhotoImage()方法将图片转换为tkinter中的图片对象使用insert()方法插入图片ImageTk直接引入后,会遇到如下错误:Traceback(mostrecentcalllast):......
  • python tkinter 使用(二)
    pythontkinter使用(二)本篇文章着重讲下tkinter中messagebox的使用。1:提示框defshowinfo(event):messagebox.showinfo("这是个提示框","thisismessagecontent")2:错误提示框defshowerror(event):messagebox.showerror("这是个错误提示框","thisismessa......
  • python tkinter 使用(十)
    pythontkinter使用(十)#!/usr/bin/python3#-*-coding:UTF-8-*-"""@Author:zh@Time2023/11/27下午3:36.@Email:@Describe:"""importtkinterfromtkinterimport*master=Tk()master.title("菜单")master.ge......
  • python tkinter 使用(三)
    pythontkinter使用(三)本篇文章主要讲下tkinter下的filedialog的使用.1:askopenfilename首先使用tkinter中fiedialog来实现一个简单的文件选择器.这里使用askopenfilename()来启动文件选择器,选择成功后打印下所选文件的名称.#!/usr/bin/python3#-*-coding:UTF-8-*-......
  • python tkinter使用(五)
    pythontkinter使用(五)本篇文章讲述tkinter中treeview的使用Treeview是一个多列列表框,可以显示层次数据。#!/usr/bin/python3#-*-coding:UTF-8-*-"""@Author:zh@Time2023/11/23下午8:28.@Email:@Describe:treeview使用"""importtkinterastkfrom......
  • python tkinter使用(四)
    pythontkinter使用(四)本篇文章主要讲下tkinter的文本框相关.tkinter中用Entry来实现输入框,类似于android中的edittext.具体的用法如下:1:空白输入框如下:name=tk.Entry(window)name.pack()2:设置输入框的默认文案name=tk.Entry(window)name.pack()name.inser......
  • python tkinter使用(十一)
    pythontkinter使用(十一)本篇文章主要讲下tkinter窗口的一些属性,以及实现无法关闭的窗口中遇到的一些问题.#!/usr/bin/python3#-*-coding:UTF-8-*-"""@Author:zh@Time2023/11/28下午13:23.@Email:@Describe:"""fromtkinterimport*importtkinteras......
  • python获取已安装程序列表
    python获取已安装程序列表本文主要讲述通过python脚本获取android设备已安装列表。首先,Python本身无法直接获取Android设备上已安装的程序列表,所以这里主要借助adb命令来实现。具体的内容如下:#!/usr/bin/python#coding=utf-8importsubprocessimportos#通过adb命令获取......