当前位置: 首页 > news >正文

Python+Selenium4元素交互1_web自动化(5)

目录

0. 上节回顾

1. 内置的等待条件

2. 元素属性

1. Python对象属性

2. HTML元素属性

3. 元素的交互

1. 输入框

2. 按钮

3. 单选框和复选框

0. 上节回顾

  • DEBUG的方式:JS断点 +Python断点
  • 编程语言提供的等待方式:sleep
  • selenium提供的等待方式:
  1. 隐式等待
  2. 显式等待
  3. 流畅等待
  • 等待条件的要求
  1. 是一个函数
  2. 接收一个参数:webdriver对象的实例
  3. 返回一个布尔值
  4. 尽量不要出现异常

1. 内置的等待条件

selenium 内置了一些判断函数,可用在需要的时候,判断页面是否就绪

例如:在 http://118.24.147.95:8086/flash.html 如果要点击按钮,等待条件有2个:

  • 元素存在
  • 元素可用
with get_webdriver() as driver:driver.get("http://118.24.147.95:8086/flash.html")def f(_):# 1. 元素存在ele = driver.find_element(By.XPATH, '//*[@id="content"]/input')if ele.is_enabled():  # 2.元素可用return Trueelse:return FalseWebDriverWait(driver, 10).until(f)ele = driver.find_element(By.XPATH, '//*[@id="content"]/input')ele.click()

使用预期条件:可用免去函数的定义过程

  • element_to_be_clickable :判断元素可见,并且可点击
  • alert_is_present: 判断出现了alert 弹窗
with get_webdriver() as driver:driver.get("http://118.24.147.95:8086/flash.html")ele = WebDriverWait(driver, 10).until(element_to_be_clickable((By.XPATH, '//*[@id="content"]/input')))ele.click()
with get_webdriver() as driver:driver.get("http://118.24.147.95:8086/delay_alert.html")ele = WebDriverWait(driver, 10).until(alert_is_present())  # 放入 等待条件ele.accept()  # 对弹窗,点击【确定】

所有的内置等待条件,需要加括号调用,

调用之后,返回一个函数,用这个函数,进行等待

2. 元素属性

元素的属性和交互,主要对WebElement对象的交互

  • 获取网页元素的信息:方法WebElement对象的属性
  • 对网页元素进行交互: 调用WebElement对象的方法

1. Python对象属性

with get_webdriver() as driver:
driver.get("https://www.baidu.com/")
# ele 是 WebElement 对象,代表网页中的一个元素
ele = driver.find_element(By.XPATH, '//*[@id="kw"]')
ele_keys = [
"id", # 对象的ID
"tag_name", # 元素的标签
"location", # 在页面中的位置(x,y)坐标
"size", # 元素大小
"rect", # 位置 + 大小
"parent", # WebDriver 对象
]
for key in ele_keys:
print(key)
print(getattr(ele, key))
print("-" * 20)

2. HTML元素属性

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255"
autocomplete="off">
with get_webdriver() as driver:driver.get("https://www.baidu.com/")ele = driver.find_element(By.XPATH, '//*[@id="kw"]')att_keys = ["id","name","class","value","maxlength","autocomplete",]for att in att_keys:print(att+":"+ele.get_attribute(att))print("-" * 20)

问题: 如何获取元素的HTML源码?

print(ele.get_attribute('outerHTML')) # 通过特殊属性,获取源码

如何获取浏览器的HTML源码?

print(driver.page_source) # 获取网页源码

3. 元素的交互

不同的元素,它支持的交互方式可能是不一样的,所以要区别对待

1. 输入框

输入框有2中实现方式

<input value="input标签实现的输入框">
<textarea>textarea标签实现的输入框</textarea>

 

输入的交互方法:

  • ele.clear() # 清除内容
  • ele.send_keys("new content") # 输入内容
  • ele.is_displayed()) # 是否显示
  • ele.is_enabled()) # 是否可用
with get_webdriver() as driver:driver.get("file:///F:/pythonWorkspace/UI_P39_Selenium4/index.html")ele = driver.find_element(By.XPATH, "//input")ele.clear()  # 清除内容ele.send_keys("new content")  # 输入内容ele.is_displayed()  # 是否显示ele.is_enabled()  # 是否可用ele.screenshot("a.png")  # 对元素进行截图

2. 按钮

按钮有多种实现方式

 

进行隐藏一下

<a href="javascript:;" onclick="btn_on_click(this)">a标签实现的按钮</a>
<hr />
<input type="button" onclick="btn_on_click(this)" value="input标签实现的按钮"/>
<hr />
<button onclick="btn_on_click(this)" >button标签实现的按钮</button>
<script>
function btn_on_click(event){
console.log(event);
alert("你点到我了!");
}
</script>

按钮的交互方法:

  • ele.click() # 鼠标 左键 单击
  • ele.is_displayed()) # 是否显示
  • ele.is_enabled()) # 是否可用
<a href="javascript:;" onclick="btn_on_click(this)">a标签实现的按钮</a>
<hr />
<input type="button" onclick="btn_on_click(this)" value="input标签实现的按钮" hidden=true/>
<hr />
<button onclick="btn_on_click(this)" disabled=true >button标签实现的按钮
</button>
<script>
function btn_on_click(event){
console.log(event);
alert("你点到我了!");
}
</script>
with get_webdriver() as driver:driver.get("file:///F:/pythonWorkspace/UI_P39_Selenium4/index2.html")for tag_name in ["a", "input", "button"]:try:ele = driver.find_element(By.XPATH, f"//{tag_name}")print("是否可见:", ele.is_displayed())print("是否可用:", ele.is_enabled())ele.click()  # 点击按钮# 按钮被禁用的时候,click 没有报错,但其实也是点击失败driver.switch_to.alert.accept()  # 处理弹窗except Exception as e:print(e)print("交互失败")print("-" * 20)

在selenium 中使用JS进行元素点击

  • ele.click() # selenium 提供 点击按钮
  • driver.execute_script("return arguments[0].click()", ele) # js 进行点击

对于被遮挡的元素,selenium的点击可能会失败,这时候换成js代码

如点一下 个人中心 遮挡 登录按钮 

with get_webdriver() as driver:driver.get("http://101.34.221.219:8010/")# 出现遮挡driver.find_element(By.XPATH, "/html/body/div[2]/div/ul[2]/div[1]/div/a").click()# 点击登录按钮ele = driver.find_element(By.XPATH, "/html/body/div[2]/div/ul[1]/div/div/a[1]")# ele.click() # 预期失败driver.execute_script("return arguments[0].click()", ele)  # 通过JS实现点击

不能点击的场景如下:

手动不能点击

selenium不能点击

js代码不能点击

底层:控制鼠标的移动和点击

 如:上图 手动能点击 但是页面被遮挡 selenium不能点击

如上图:js代码不能点击

selenium点击元素的原理:

  • 定位元素
  • 找到元素 x,y坐标
  • 把鼠标移动 x,y坐标中心 (可用手动调整坐标,模拟真人操作)
  • 按下鼠标

3. 单选框和复选框

单选框和复选框都是input标签实现的,只是type不同

 

<!--多选框 -->
<input type="checkbox" name="check_1" value="1"/>
<br>
<input type="checkbox" name="check_1" value="2"/>
<hr/>
<!--单选框 -->
<input type="radio" name="check_2"/>
<input type="radio" name="check_2" />

单选复选框的交互方法:

  • ele.click() # 鼠标 左键 单击
  • ele.is_displayed()) # 是否显示
  • ele.is_enabled()) # 是否可用
  • ele.is_selected() # 本元素是否被选中
with get_webdriver() as driver:driver.get("file:///F:/pythonWorkspace/UI_P39_Selenium4/index3.html")ele = driver.find_element(By.XPATH, "/html/body/input[1]")print("是否选中:", ele.is_selected())ele.click()print("是否选中:", ele.is_selected())

对于单选复选框来说,click是【切换状态】,如之前是选中,点击之后反而是没选中 在点击之前,建议 先判断状态

相关文章:

Python+Selenium4元素交互1_web自动化(5)

目录 0. 上节回顾 1. 内置的等待条件 2. 元素属性 1. Python对象属性 2. HTML元素属性 3. 元素的交互 1. 输入框 2. 按钮 3. 单选框和复选框 0. 上节回顾 DEBUG的方式&#xff1a;JS断点 Python断点编程语言提供的等待方式&#xff1a;sleepselenium提供的等待方式&…...

2023双非计算机硕士应战秋招算法岗之深度学习基础知识

word版资料自取链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1H5ZMcUq-V7fxFxb5ObiktQ 提取码&#xff1a;kadm 卷积层 全连接神经网络需要非常多的计算资源才能支撑它来做反向传播和前向传播&#xff0c;所以说全连接神经网络可以存储非常多的参数&#xff0c;…...

Python opencv进行矩形识别

Python opencv进行矩形识别 图像识别中,圆形和矩形识别是最常用的两种,上一篇讲解了圆形识别,本例讲解矩形识别,最后的结果是可以识别出圆心,4个顶点,如下图: 左边是原始图像,右边是识别结果,在我i5 10400的CPU上,执行时间不到8ms。 识别出结果后,计算任意3个顶点…...

网安入门必备的12个kali Linux工具

kali Linux工具帮你评估 Web 服务器的安全性&#xff0c;并帮助你执行黑客渗透测试。 注意&#xff1a;这里不是所提及的所有工具都是开源的。 1. Nmap Nmap &#xff08; 网络映射器 &#xff09;是一款用于 网络发现 和 安全审计 的 网络安全 工具. 主机发现,端口扫描,版本…...

【测试面试】头条大厂,测试开发岗真实一面。你能抵得住吗?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 小吴&#xff1a; 现…...

分享app的测试技巧

前言 今天笔者想和大家来唠唠app测试&#xff0c;现在的app有非常的多&#xff0c;这些app都是需要经过测试之后才能发布到应用市场中&#xff0c;app已经成为了我们日常生活中不可或缺的一部分了&#xff0c;但它的功能必须强大&#xff0c;才能受到消费者的重视&#xff0c;…...

HTML 基础【快速掌握知识点】

目录 一、什么是HTML&#xff1f; 二、HTML的发展史 三、HTML5的优势 四、HTML基本结构 五、DOCTYPE声明 六、title标签 七、meta标签 八、标题标签 九、段落标签 十、换行标签 十一、水平线标签 十二、字体样式标签 十三、特殊符号 十四、图像标签 十五、链接标…...

SpringBoot入门(二)

这里写目录标题一、SpringBoot整合Junit1.1 搭建SpringBoot工程1.2 引入starter-test起步依赖1.3 编写类1.4 测试二、SpringBoot整合mybatis2.1 搭建SpringBoot工程2.2 引入mybatis起步依赖&#xff0c;添加驱动2.3 编写DataSource和MyBatis相关配置2.4 定义表和实体类2.5 编写…...

大数据|大数据基础(概念向)

目录 &#x1f4da;大数据概念 &#x1f407;常见数据存储单位 &#x1f407;大数据的特点&#xff08;5V&#xff09; &#x1f407;大数据 VS 数据库 &#x1f31f;数据库 &#x1f31f;大数据 &#x1f4da;大数据业务分析基本步骤 &#x1f407;收集数据 &#x1f4…...

若依配置教程(九)若依前后端分离版部署到服务器Nginx(Windows版)

搭建若依环境 要部署到服务器上&#xff0c;首先要在本地运行若依系统 文章目录搭建若依环境后端部署1.在application.yml中修改后台端口&#xff0c;这里默认是8080。2.在application-druid.yml中修改正式环境数据库。3.后端打包部署前端部署下载安装NginxNginx代理配置启动N…...

【仔细理解】计算机视觉基础1——特征提取之Harris角点

Harris角点是图像特征提取中最基本的方法&#xff0c;本篇内容将详细分析Harris角点的定义、计算方法、特点。 一、Harris角点定义 在图像中&#xff0c;若以正方形的小像素窗口为基本单位&#xff0c;按照上图可以将它们划分三种类型如下&#xff1a; 平坦区域&#xff1a;在任…...

Elasticsearch7.8.0版本进阶——近实时搜索

目录一、近实时搜索的概述1.1、按段&#xff08;per-segment&#xff09;搜索1.2、更轻量的方式搜索二、为什么Elasticsearch是 近 实时搜索三、如何解决索引了一个文档然后却没有搜到四、哪种情况不需要每秒刷新4.1、使用 Elasticsearch 索引大量的日志文件4.2、使用 Elastics…...

OAK相机深度流探测草莓距离

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…...

文件共享服务器(CIFS)的相关知识及指令

文件共享服务器&#xff08;CIFS&#xff09; 微软开发的 共享服务器概述 通过网络提供文件共享拂去&#xff0c;提供文件下载和上传服务&#xff08;类似于FTP服务器&#xff09; 创建共享 通过本地登录时&#xff0c;仅受NTFS权限的控制通过网络访问时&#xff0c;受共享…...

springcloud-2service consumer

创建使用会员微服务模块-service consumer思路分析/图解创建Moduel(member-service-consumer-80) & 完成配置new Module->member-service-consumer-80->finish检查父子项目的pom是否添加相应的对应module和parent本项目的pom.xml可以参考provider的&#xff0c;并删掉…...

JavaScript 进阶--charater3

文章目录前言一、编程思想1.1 面向过程介绍1.2 面向对象编程 (oop)对比二、构造函数三、原型3.1原型3.2 constructor 属性3.3 对象原型3.4 原型继承3.5 原型链总结前言 &#x1f191;学习目标 理解面向对象思想&#xff0c;掌握函数原型对象运用面向对象封装继承特点&#xf…...

Solon2 之基础:三、启动参数说明

启动参数&#xff0c;在应用启动后会被静态化&#xff08;为了内部更高效的利用&#xff09;。比如&#xff0c;想通过体外扩展加载配置&#xff0c;是不能改掉它们的。 1、启动参数 启动参数对应的应用配置描述–envsolon.env环境&#xff08;可用于内部配置切换&#xff09…...

引入防关联浏览器以防止数据盗窃

目前&#xff0c;互联网已成为我们生活中不可缺少的且不断发展的一部分。因此&#xff0c;互联网变得更加复杂和多样化&#xff0c;每天都有新的技术、服务和应用推出。在这个不断变化的环境中&#xff0c;虚拟浏览器最近作为一种革命性的新方式出现在互联网上。 简而言之&…...

Spring的一些知识点

什么是Spring&#xff1f; Spring是一种轻量级的开发框架&#xff0c;旨在提高开发人员的开发效率以及系统的可维护性。 Spring的核心模块 Spring Core是基础模块&#xff0c;可以说Spring的其他功能都要依赖于该类库&#xff0c;主要提供IOC的依赖注入功能&#xff1b; Spri…...

使用WordPress快速搭建外贸网站教程

一、下载安装 1、首先前往官方下载wordPress框架&#xff0c;下载地址&#xff1a;Download | WordPress.org 2、把下载好的安装包上传到我们的服务器&#xff0c;解压 3、我使用的搭建环境是宝塔Linux CentOS 7.9&#xff08;Apache2.4mysql5.6php7.4&#xff09;&#xf…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

SpringAI实战:ChatModel智能对话全解

一、引言&#xff1a;Spring AI 与 Chat Model 的核心价值 &#x1f680; 在 Java 生态中集成大模型能力&#xff0c;Spring AI 提供了高效的解决方案 &#x1f916;。其中 Chat Model 作为核心交互组件&#xff0c;通过标准化接口简化了与大语言模型&#xff08;LLM&#xff0…...