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

web 自动化之 selenium 元素四大操作三大切换等待

文章目录

      • 一、元素的四大操作
      • 二、三大切换&等待
        • 1、切换窗口:当定位的元素不在当前窗口,则需要切换窗口
        • 2、切换iframe:当定位的元素在frame/iframe,则需要切换
        • 3、切换弹出窗口

一、元素的四大操作

1、输入
2、点击
3、获取文本
4、获取属性

import time
from selenium import webdriver
from selenium.webdriver.common.by import Bydriver=webdriver.Edge()
driver.get("http://www.baidu.com")
time.sleep(2)
el1=driver.find_element(By.ID,"kw")
# 输入
el1.send_keys()
# 点击
el1.click()
# 获取元素文本内容
el2=driver.find_element(By.LINK_TEXT,"新闻")
print("打印该元素的文本内容:",el2.text)
# 获取元素的属性
print("获取autocomplete属性值:",el1.get_attribute("autocomplete"))

二、三大切换&等待

元素定位不到可能的原因:

  • 1、定位语句不对
  • 2、是否加等待
  • 3、元素嵌套在iframe/frame元素标签中(切换frame);多层嵌套frame/iframe
  • 4、要定位的元素非当前窗口(切换句柄)
1、切换窗口:当定位的元素不在当前窗口,则需要切换窗口
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
"""
元素等待:
1、强制等待 time.sleep(秒数) 停留
2、智能等待(隐士等待) driver.implicitly_wait(秒数) 给页面上所有的元素设置全
局等待时间
只要在设置的时间范围内找到了元素,就会执行下一个代码,最多等待设置的时间
3、显示等待 显示等待:等待当前需要操作的元素 基于多种条件+等待元素
多种条件:等待元素可见?等待url跳转为xxx?等待新窗口出现?很多场景条件
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
自动化测试框架脚本:
以显示等待为主
以强制等待为辅
"""driver=webdriver.Edge()
# 智能等待
# driver.implicitly_wait(10)
driver.get("https://www.baidu.com")
# 输入搜索内容
el1=driver.find_element(By.ID,"kw")
el1.send_keys("chrome")
#点击百度一下
el2=driver.find_element(By.ID,'su')
el2.click()
# 显示等待
loc=(By.XPATH,'//*[@id="2"]/div/h3/a')
# 等待元素存在
WebDriverWait(driver,15,1).until(ec.presence_of_element_located(loc))
# 点击搜索的内容
el3=driver.find_element(*loc)
el3.click()
# 新打开的窗口里面定位元素 需要切换窗口
# 获取浏览器窗口列表 最早打开的窗口放到list的最前面
wins=driver.window_handles
print(wins)
# 切换最后打开的窗口
driver.switch_to.window(wins[1])
el4=driver.find_element(By.XPATH,'//*[@id="J-lemma-main-wrapper"]/div[2]/div/div[1]/div/div[2]/div[1]/div/a[1]')
el4.click()
# 为了看到效果
time.sleep(3)
driver.close()
2、切换iframe:当定位的元素在frame/iframe,则需要切换
"""
定位的元素包含在iframe/frame标签里面
切换到iframe/frame
"""
import time
from selenium.webdriver.support import expected_conditions as ecfrom selenium.webdriver.common.by import By
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWaitdriver=webdriver.Edge()
driver.get("https://www.csdn.net/")
driver.implicitly_wait(5)
driver.find_element(By.XPATH,'//a[@class="toolbar-btn-loginfun"]').click()
time.sleep(2)
# 切换iframe 方式一:id
# driver.switch_to.frame("id")
# 切换iframe 方式二:索引 索引值从0开始
# driver.switch_to.frame(3)
# 切换iframe 方式三:找到iframe元素
driver.switch_to.frame(driver.find_element(By.XPATH,'//*[@id="passportbox"]/iframe'))
# 再定位元素
driver.find_element(By.XPATH,'/html/body/div/div/div/div[2]/div[2]/div[1]/div[1]/span[3]').click()
time.sleep(2)
driver.close()
# # 切换当前 iframe/frame 上一级 iframe/frame 元素
# driver.switch_to.parent_frame()
# # 返回第一代 iframe/frame
# driver.switch_to.default_content()
3、切换弹出窗口

弹窗处理: driver.switch_to.alert

import time
from selenium.webdriver.common.by import By
from selenium import webdriverdriver=webdriver.Edge()
driver.get(r"E:/Notepad++/test3.html")el=driver.find_element(By.XPATH,"/html/body/form[1]/input[6]")
time.sleep(2)
el.click()
# 弹窗进行处理
alert=driver.switch_to.alert
print(alert.text)
# 点击确认
time.sleep(2)
alert.accept()time.sleep(2)
driver.close()

注:E:/Notepad++/test3.html 文件内容见 Web 自动化之 HTML & JavaScript 详解 中的二、javascript 脚本代码

相关文章:

web 自动化之 selenium 元素四大操作三大切换等待

文章目录 一、元素的四大操作二、三大切换&等待1、切换窗口:当定位的元素不在当前窗口,则需要切换窗口2、切换iframe:当定位的元素在frame/iframe,则需要切换3、切换弹出窗口 一、元素的四大操作 1、输入 2、点击 3、获取文本 4、获取属…...

FEKO许可证的安全与合规性

在电磁仿真领域,FEKO软件因其出类拔萃的性能和广泛的应用场景,赢得了全球用户的广泛赞誉。但在这背后,是什么让FEKO在众多竞争者中脱颖而出?答案是其许可证的安全与合规性。它们不仅为用户提供了坚固的保障,更确保了用…...

w~大模型~合集30

我自己的原文哦~ https://blog.51cto.com/whaosoft/13284996 #VideoMamba 视频理解因大量时空冗余和复杂时空依赖,同时克服两个问题难度巨大,CNN 和 Transformer 及 Uniformer 都难以胜任,Mamba 是个好思路,让我们看看本文是…...

PBR材质-Unity/Blender/UE

目录 前言: 一、Unity: 二、Blender: 三、UE: 四、全家福: 五、后记: 前言: PBR流程作为表达物理效果的经典方式,很值得一学。纹理贴图使用的是上一期的Textures | cgbookcas…...

websocketpp 安装及使用

介绍 WebSocket 是从 HTML5 开始支持的一种网页端和服务端保持长连接的消息推送机制。 传统的 web 程序都是属于 "一问一答" 的形式,即客户端给服务器发送了一个 HTTP 请求,服务器给客户端返回一个 HTTP 响应。这种情况下服务器是属于被动…...

web:InfiniteScroll 无限滚动

InfiniteScroll 无限滚动 分页加载 <div class"data-box" v-infinite-scroll"loadMore"> <li v-fori in dataList></li> </div>form: {current: 1,size: 10,}loadMore(){console.log(this.dataList.length, this.total ,8888)if…...

LeetCode[101]对称二叉树

思路&#xff1a; 对称二叉树是左右子树对称&#xff0c;而不是左右子树相等&#xff0c;所以假设一个树只有3个节点&#xff0c;那么判断这个数是否是对称二叉树&#xff0c;肯定是先判断左右两个树&#xff0c;然后再看根节点&#xff0c;这样递归顺序我们就确认了&#xff0…...

c/c++爬虫总结

GitHub 开源 C/C 网页爬虫探究&#xff1a;协议、实现与测试 网页爬虫&#xff0c;作为一种自动化获取网络信息的强大工具&#xff0c;在搜索引擎、数据挖掘、市场分析等领域扮演着至关重要的角色。对于希望深入理解网络工作原理和数据提取技术的 C/C 开发者&#xff0c;尤其是…...

js fetch流式请求 AI动态生成文本,实现逐字生成渲染效果

开启流式请求&#xff1a;向后端接口发起普通的 fetch&#xff0c;它会返回一个包含 ReadableStream 的 Response 对象获取流式读取器&#xff1a;调用 response.body.getReader() 获取一个 ReadableStreamDefaultReader 实例循环读取数据块&#xff1a;在 while(true) 循环或 …...

第8章-2 查询执行的基础

上一篇&#xff1a;《第8章-1 查询性能优化-优化数据访问》&#xff0c;接着来了解查询执行的过程&#xff0c;这个对sql执行有个更直观的了解。 查询执行的基础 当希望MySQL能够以更高的性能运行查询时&#xff0c;最好的办法就是弄清楚MySQL是如何优化和执行查询的。一旦理解…...

java面试OOM汇总

在正式 Minor GC 前&#xff0c;JVM 会先检查新生代中对象&#xff0c;是比老年代中剩余空间大还是小。假如 Minor GC之后 Survivor 区放不下剩余对象&#xff0c;这些对象就要进入老年代 老年代剩余空间大于新生代中的对象大小&#xff0c;那就直接 Minor GC&#xff0c; GC 完…...

Java面试全记录:Spring Cloud+Kafka+Redis实战解析

Java面试全记录&#xff1a;Spring CloudKafkaRedis实战解析 人物设定 面试官&#xff1a;来自某互联网大厂资深架构师&#xff0c;着深灰色西装&#xff0c;手持MacBook Pro 候选人&#xff1a;张伟&#xff08;随机生成&#xff09;&#xff0c;28岁&#xff0c;硕士&…...

com.fasterxml.jackson.dataformat.xml.XmlMapper把对象转换xml格式,属性放到标签<>里边

之前从没用过xml和对象相互转换&#xff0c;最近项目接了政府相关的。需要用xml格式数据进行相互转换。有些小问题&#xff0c;困扰了我一下下。 1.有些属性需要放到标签里边&#xff0c;有的需要放到标签子集。 2.xml需要加<?xml version"1.0" encoding"…...

LiveData:Android响应式编程的核心利器

LiveData是一种可观察的数据持有类,用于在Android应用中实现数据的响应式编程。它具有以下特点和作用: 特点 生命周期感知:LiveData能够感知与其关联的组件(如Activity、Fragment)的生命周期状态。只有当组件处于活跃状态(如Activity处于RESUMED状态)时,LiveData才会将…...

Browserless 快速上手

要将你提供的 HTML 模板和数据结构转换为可以用于 Browserless /pdf 接口的 JSON 请求体&#xff08;且能正确渲染为 PDF&#xff09;&#xff0c;需要满足以下几点&#xff1a; ✅ 最终目标格式&#xff08;这是能用的格式&#xff09;&#xff1a; json 复制编辑 { "h…...

安装Hadoop并运行WordCount程序

一、安装 Java Hadoop 依赖 Java&#xff0c;首先需要安装 Java 开发工具包&#xff08;JDK&#xff09;。以 Ubuntu 为例&#xff1a; bash sudo apt update sudo apt install openjdk-8-jdk安装后&#xff0c;设置环境变量&#xff1a; bash echo export JAVA_HOME/usr/li…...

react-diff-viewer 如何实现语法高亮

前言 react-diff-viewer 是一个很好的 diff 展示库&#xff0c;但是也有一些坑点和不完善的地方&#xff0c;本文旨在描述如何在这个库中实现自定义语法高亮。 Syntax highlighting is a bit tricky when combined with diff. Here, React Diff Viewer provides a simple rend…...

自定义prometheus exporter实现监控阿里云RDS

# 自定义 Prometheus Exporter 实现多 RDS 数据采集## 背景1. Prometheus 官网提供的 MySQL Exporter 对于 MySQL 实例只能一个进程监控一个实例&#xff0c;数据库实例很多的情况下&#xff0c;不方便管理。 2. 内部有定制化监控需求&#xff0c;RDS 默认无法实现&#xff0c;…...

【计算机网络】--tcp三次握手

文章目录 示意图&#xff1a;抓包结果&#xff1a;第一次握手&#xff08;Client → Server&#xff09;第二次握手&#xff08;Server → Client&#xff09;第三次握手&#xff08;Client → Server&#xff09;为什么是三次握手 不是两次或者四次 示意图&#xff1a; 抓包结…...

List<T>中每次取固定长度的数据

工具类方法 package org.common.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** 批处理取值组件* param <T>*/ public class BatchIterator<T> implements Iterator<List<T>> {private final List<T&g…...

UI-TARS: 基于视觉语言模型的多模式代理

GitHub&#xff1a;https://github.com/bytedance/UI-TARS 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI 基于视觉语言模型&#xff08;Vision-Language Model&#xff09;的 GUI 代理应用&#xff0c;允许用户通过自然语言控制电脑操…...

02_线性模型(回归线性模型)

描述 线性模型是在实践中广泛使用的一类模型&#xff0c;线性模型利用输入特征的线性函数&#xff08;linear function&#xff09;进行预测。 用于回归的线性模型 对于回归问题&#xff0c;线性模型预测的一般公式如下&#xff1a; $ \widehat y w[0]*x[0]w[1]*x[1]…w[p…...

Spark SQL 运行架构详解(专业解释+番茄炒蛋例子解读)

1. 整体架构概览 Spark SQL的运行过程可以想象成一个"SQL查询的加工流水线"&#xff0c;从原始SQL语句开始&#xff0c;经过多个阶段的处理和优化&#xff0c;最终变成分布式计算任务执行。主要流程如下&#xff1a; SQL Query → 解析 → 逻辑计划 → 优化 → 物理…...

【计算机网络】网络IP层

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f152; C 语言 | &#x1f310; 计算机网络 上篇文章&#xff1a;传输层协议TCP 下篇文章&#xff1a;数据链路层 文章摘要&#xff1…...

一天学会Maven

一、Maven简介和快速入门 1.1 Maven介绍 Maven 是一款为 Java 项目构建管理、依赖管理的工具&#xff08;软件&#xff09;&#xff0c;使用 Maven 可以自动化构建、测试、打包和发布项目&#xff0c;大大提高了开发效率和质量。 总结&#xff1a;Maven就是一个软件&#xf…...

CentOS部署Collabora Online

1.安装Docker CentOS7安装Docker(超详细)-CSDN博客 2.拉取镜像 docker pull collabora/code:latest 3. 启动容器&#xff08;直接暴露HTTP端口&#xff09; docker run -d --name collabora -p 9980:9980 -e "usernameadmin" -e "password123456" -e …...

DeepInjectSQL - 基于 AI 生成对抗网络(GAN)的下一代 SQL 注入自动化漏洞猎手

概述 SQLMap本身是一个成熟的自动化SQL注入工具&#xff0c;可以与GAN结合起来&#xff0c;让GAN生成的Payload替代传统的手工或规则生成的测试用例&#xff0c;从而提高检测的覆盖率和效率。 分析可行性 GAN通常用于生成类似真实数据分布的数据&#xff0c;例如图片、文本等。…...

配置Hadoop集群-集群配置

以下是 Hadoop 集群的核心配置步骤&#xff0c;基于之前的免密登录和文件同步基础&#xff0c;完成 Hadoop 分布式环境的搭建&#xff1a; 1. 集群规划 假设集群包含 3 个节点&#xff1a; master&#xff1a;NameNode、ResourceManagerslave1&#xff1a;DataNode、NodeMana…...

变量函数实战:高保真APP原型“发票页面”动态交互教程

变量函数是高保真交互原型设计中常见的高级交互功能&#xff0c;能够避免重复复制与手动修改页面元素和逻辑标注&#xff0c;让演示更有真实体验感。本文分享一个高保真APP交互原型页面的实操案例&#xff0c;结合原型设计工具中的变量函数与逻辑判断功能&#xff0c;手把手教你…...

Spring Boot 3 + Undertow 服务器优化配置

优化背景 当你的application需要支持瞬时高并发的时候&#xff0c;tomcat已经不在是最优的选择&#xff0c;我们可以改为Undertow&#xff0c;并对其进行优化。 Undertow 是一个轻量级的、高性能的Java Web 服务器&#xff0c;由JBoss 开发并开源。它是基于非阻塞&#xff08;…...