三、-切换frame&css选择器

2023-11-17

等待元素出现

 

隐式等待

用WebDriver 对象的implicitly_wait方法。 这个方法有一个参数,指明等待最长时间。

driver.implicitly_wait(10)

 

显式等待

Selenium里面还有一种称之为显式等待的, 可以为一个操作专门指定等待时间

 

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
ele
= WebDriverWait(driver, 60).until(EC.presence_of_element_located((By.ID,'1')))

 

比较长,我们可以顺着读一遍,很像自然语言.

大家不用强记,需要使用的时候,直接拷贝,修改红色部分就可以了。

 

 

Frame切换

 

frame介绍

例子,网页中包含网页:

http://music.163.com/#/discover/toplist?id=60198

 

iframe 就是一个特殊的html 元素, 它在原来的html 范围内,开辟了一个新的HTML。

如果一个html文档结构比作一个国家的话, iframe就像 在一个国家里面建立一个  附属国家。 里面是一个全新的html文档。就像国中之国

 

W3C对frame的介绍

iframe:

http://www.w3school.com.cn/tags/tag_iframe.asp

 

frameset:

http://www.w3school.com.cn/tags/tag_frameset.asp

两者的区别是:

iframe 用于在网页内显示网页。和frameset不同的是,

frameset内置好几个子html

而iframe 只内置一个子html

 

 

webdriver切换frame的方法

 

driver.switch_to.frame(frame_reference)

 

 

这个  frame_reference 可以是

 

  1. frame 元素的 name 属性值 或者ID属性值:contentFrame(浏览器里面看一下
  2. 索引值 (从0开始):0   可能有人问,我咋知道索引?谁先出现就是第一个
  3. frame 所对应的WebElement :driver.find_element_by_tag_name("iframe")

 

建议优先使用第一种,如果frame元素没有 name 属性,就用下面的两种方法。

比如元素有ID, 就可以根据 find element by id 找到webelement对象,然后, 就是第三种了。

 

从里面的frame切换回主HTML

driver.switch_to.default_content()

 

 

嵌套frame中如何逐层切换

一层一层的切换

driver.switch_to.frame('layer2')
driver.switch_to.frame('layer3')

 

 

返回上一层frame

driver.switch_to.parent_frame()

 

 

注意动态ID不能使用

前面我们找排行榜歌曲的时候,

f12显示,

 

寻找ID是找的这个蓝框中的, 为什么不找红框子中的呢?

比我们上面的 div 更贴近我们要找的table元素, 而且它也有id啊。?

 

 

很多前端开发框架会自动生成一些元素, 有动态生成的id 会变,

这个是 会变的id 要注意,不能用来选择

怎么识别是动态的呢? 名字往往是一串随机字符,

而不会变的id值通常名字是有意义的单词。

 

 

CSS选择器

css选择器是什么

css 选择器 是浏览器用来选择元素的,  我们selenium 也要选择元素,也可以使用css 的选择器语法来选择 web 元素。 而且这种方法效率还非常的高。

 

CSS选择器基本用法

根据 tag 名 选择

 

p {color: red;}

 

表示选择所有的 p 元素 , 运行一下都变成红色了

 

如果改为

p {color: blue;}  , 运行一下

 

 

这里面 选择器就根据元素标签名。。。。起到了选择的作用

 

------

 

 根据  id ,修改一下

#food {color: blue;} 表示选择ID为 food的 元素 ,

 

如果改为

#food2 {color: blue;}  , 运行一下

 

 

这里面 选择器就根据  id 。。。。起到了选择的作用

 

------

 

根据class 选择,修改一下

 .special  {color: red;}

 

有的元素 有两个class 值,


    <span class="vegetable good">黄瓜</span>

 


   .good  {color: red;}

 

.vegetable {color: blue;} 表示选择所有的 class

 为 vegetable 的元素 ,

注意

<span class="vegetable good">黄瓜</span>

 

表示这个元素 有两个class 值, 而不是 一个 vegetable good 整体的属性

 

 

这里面 选择器就根据  class。。。。起到了选择的作用

 

可以

.vegetable.good

 

----

当然也可以组合写 span.vegetable  {color: blue;}

 

这样p.vegetable 就不会被选中

<p class="vegetable">青菜</p>

 

 

 

 

以上介绍的只是css选择器的冰山一角,更多内容移步到w3c有更多资料

后续课程中也会陆续讲到css的高级使用技巧

 

 

使用css方法选择元素

eles = driver.find_elements_by_css_selector('#choose_car option')

 

 

CSS后代选择器用法

 

语法 如下

<s1>  <s2>

表示 选择s1 元素 里面 所有的s2元素, S2可以是S1的直接子节点,也可以不是

其中<s1>  <s2>可以是我们前面学过的css 根据tag名、id 、 class 描述的任何语法

比如:

#choose_car option

就是 选择 id为 choosecar 的元素的内部的 标签为option 的子元素。

到底是 不是直接子元素,不重要,

只要是 属于choose_car 的内部的option元素就可以了。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三、-切换frame&css选择器 的相关文章

  • 利用ANSYS随机振动分析功能实现随机疲劳分析

    ANSYS随机振动分析功能可以获得结构随机振动响应过程的各种统计参数 如 均值 均方根和平均频率等 根据各种随机疲劳寿命预测理论就可以成功地预测结构的随机疲劳寿命 本文介绍了ANSYS随机振动分析功能 以及利用该功能 按照Steinberg
  • Android SDK Android NDK 官方下载地址

    Android SDK Android NDK 官方下载地址 Android NDK r6b Windows http dl google com android ndk android ndk r6b windows zip Mac OS
  • VisualStudio(2022)- 打包项目文件为.exe安装包

    目录 前言 一 安装扩展 二 制作安装包 setup文件 2 1 添加setup项目 2 2 配置setup项目 2 3 添加项目文件到setup项目中 扩展知识 三个文件夹说明 2 4 设置项目主输出 2 5 设置快捷方式 2 6 生成安
  • 数据结构--单链表的c语言实现(超详细注释/实验报告)

    数据结构 单链表的c语言实现 超详细注释 实验报告 知识小回顾 在顺序表中 用一组地址连续的存储单元来一次存放线性表的结点 因此结点的逻辑顺序和物理顺序是一致的 而链表则不然 链表是用一组任意的存储单元来存放线性表的结点 这组储存单元可以是
  • 面向对象之魔法方法

    目录 概念 魔法方法分类 构造与初始化 new new 的使用场景 init del 类的表示 str repr bool 访问控制 比较操作 eq ne lt gt 容器类操作 重要 可调用对象 序列化 getstate setstate
  • linux initcall机制

    Linux系统启动过程很复杂 因为它既需要支持模块静态加载机制也要支持动态加载机制 模块动态加载机制给系统提供了极大的灵活性 驱动程序既可支持静态编译进内核 也可以支持动态加载机制 Linux系统中对设备和子系统的初始化在最后进行 主要过程
  • 网关、路由、DNS详细解释

    网关 Gateway 又称网间连接器 协议转换器 网关在网络层以上实现网络互连 是最复杂的网络互连设备 仅用于两个高层协议不同的网络互连 网关既可以用于广域网互连 也可以用于局域网互连 针对普通客户来说 网关就是运营商的交换机端口地址 也就
  • AI 代码辅助工具-codeium(免费)---Android studio

    Codeium官网说明 JetBrains IDEs Tutorial Codeium Free AI Code Completion ChatCodeium offers best in class AI code completion
  • Linux 系统中的 SNMP Trap及常用OID

    浅谈 Linux 系统中的 SNMP Trap 转载 http www ibm com developerworks cn linux l cn snmp 本文讲解 SNMP Trap 在介绍 Trap 概念之前 首先认识一下 SNMP 吧
  • Windows 查看端口占用并关闭

    Windows 查看端口占用并关闭 在启动服务的时候 可能会遇到端口被占用的情况 这时就要知道哪个服务占用了这个端口 并将其关闭 然后再启动服务就不会存在端口占用了 这里以 Tomcat 的默认端口 7080 为例 一 打开命令窗口 Win
  • 概率图模型笔记(9-10)——Inference-Belief Propagation

    9 Inference Belief Propagation part1 9 1 Belief Propagation 9 1 1 聚类图 Cluster Graphs 聚类图即这样的一个无向图 节点是团 Ci X1 Xn C i sube
  • element-plus 组件解析 - Collapse 折叠面板

    element plus 组件解析 Collapse 折叠面板 1 组件介绍 2 组件组成 3 组件实现 3 1 el collapse 1 v model activeNames 2 手风琴效果 3 el collapse 关键逻辑 3
  • Vue 源码之Vue 响应式原理【完整版】

    写在前面 由于昨天写的文章 Vue 源码之Vue视图更新原理 一 与今天的内容代码有些相关联 所以开头先进行简单的回顾阐述 也方便对内容进行完整的阅读 Vue 视图更新原理 Vue 的视图更新原理主要涉及的是响应式相关API Object
  • 深入理解PHP内存管理之谁动了我的内存

    作者 Laruence 本文地址 http www laruence com 2011 03 04 1894 html 转载请注明出处 首先让我们看一个问题 如下代码的输出 var dump memory get usage a larue
  • Ubuntu18.04——正确安装英伟达(NVIDIA)显卡驱动的一种简便方法

    Ubuntu18 04 正确安装英伟达 NVIDIA 显卡驱动的一种简便方法 前提说明 1 打开软件和更新 附加驱动 选中下图所示项并点击应用更改 已经是的话 就不用更改 2 连上网络 打开终端 依次输入以下命令 3 退出终端 重新启动电脑
  • php后台接收blob文件流,如何从php中的BLOB播放流音频?

    我有这个smartReadFile php函数 它允许从文件播放音频流 你将如何修改此函数 以便查询mysql数据库BLOB而不是读取特定文件 function smartReadFile location filename mimeTyp
  • 百川AI大模型开放内测,你的AI工具箱里又多了一个选择

    日前国内大模型开源市场又多了一个猛将 百川智能 厂商卷 消费者就受益 这块模型由原搜狗创始人带队研发 背后融合有一些搜索的思路 日前公开了其53B的大模型 未来的企业应用上又多了一份选择 https www baichuan ai com
  • Java常用实用类总结

    常用实用类总结 这应该算是我写的第一篇比较正式的文章了 主要介绍一下我门经常用到的一些常用实用类 主要包括 String类 StringBuffer类 StringTokenizer类 Date类 Calender类 Math类 BigIn
  • Qt—事件处理

    Qt中 事件作为一个对象 继承自QEvent类 常见的有键盘事件QKeyEvent 鼠标事件QMouseEvent和定时器事件QTimerEvent等 Qt中 任何QObject子类示例都可以接收和处理事件 实际编程中通常实现部件的pain

随机推荐

  • Rancher 全球化部署最佳实践

    作者 万绍远 CNCF 基金会官方认证 Kubernetes CKA CKS 工程师 云原生解决方案架构师 对 ceph Openstack Kubernetes prometheus 技术和其他云原生相关技术有较深入的研究 参与设计并实施
  • JS敏感信息泄露:不容忽视的WEB漏洞

    0x00 前言 这段时间jsonp漏洞再一次证明了一个微小的漏洞 经过攻击者的巧妙而持久的利用 也会对企业和用户造成巨大的危害 而本文将要介绍的JS泄露敏感信息问题也是如此 攻击者不仅可以轻松收集用户手机号 姓名等隐私信息 更可以借此攻入企
  • StreamUtils

    StreamUtils org springframework util StreamUtils 输入 从字节数组到输出流 void copy byte in OutputStream out 从输入流到输出流 int copy Input
  • 刷脸支付不带手机钱包一样可以买单

    今年 移动支付加快脚步 迅速腾飞 其中最受国内外各大企业商户重视的 应该属去年开始投入使用的刷脸支付设备了与扫描二维码等很多移动收款方法 刷脸 支付的应用更为方便 支付的效率更高 安全性更强 无疑速决了很多当前的短处 手机扫码签约免密支付
  • Eclipse打开时出现failed to create the java virtual machine...

    一 问题分析 关于Eclipse出现failed to create the java virtual machine 等情况 1 重装系统之后会发现eclipse很意外的打不开 2 有时候Eclipse使用的时间过长 3 以上情况都会出现
  • vue-router设置默认路由

    git仓库 https github com xiaoli0510 vue router vue使用vue router步骤 1 安装并创建实例 npm install vue router 2 新建router 文件夹和router js
  • libvirt介绍

    libvirt是为了更方便地管理各种Hypervisor而设计的一套虚拟化库 libvirt作为中间适配层 让底层Hypervisor对上层用户空间的管理工具 virsh virt manager 做到完全透明 因为libvirt屏蔽了底层
  • 云原生Java架构师的第一课阿里云部署docker2- (docker实战-安装mysql)

    docker安装成功 后面就只需要去找对应的网站进行镜像下载安装就可以安装任意版本的数据库 而不需要考虑Linux服务器版本和架构 1 拉取 MySQL 镜像 去docker hub 找到mysql镜像 上面有所有的mysql版本和拉取镜像
  • 【网安神器篇】——hydra爆破工具

    作者名 Demo不是emo 主页面链接 主页传送门创作初心 舞台再大 你不上台 永远是观众 没人会关心你努不努力 摔的痛不痛 他们只会看你最后站在什么位置 然后羡慕或鄙夷座右铭 不要让时代的悲哀成为你的悲哀专研方向 网络安全 数据结构 每日
  • 用photoshop拼接一个七巧板图案

    转自 https jingyan baidu com article 215817f7a1f6fb1eda1423f8 html 图片处理软件图片市场是一个常见的工具软件 我们在使用时可以自己发掘一些有意思的功能 笔者从旋转拼接角度 以一个
  • 8-3编码器,3-8译码器的verilog实现

    在数字系统中 由于采用二进制运算处理数据 因此通常将信息变成若干位二进制代码 在逻辑电路中 信号都是以高 低电平的形式输出 编码器 实现编码的数字电路 把输入的每个高低电平信号编成一组对应的二进制代码 设计一个输入为8个高电平有效信号 输出
  • 回到十七世纪,让我来编算一本常用对数表(对数结果是小数,要有分数的思想,指数的幂是分数,这样可以实现小数分数转化位整数的幂的求法)

    原文地址 回到十七世纪 让我来编算一本常用对数表作者 小牛 自十八 九岁学习了对数后 就觉得造对数表真不简单 据说十七世纪那时 说如果谁发现了对数表上有一个数字错 就奖一两黄金 据百科百度 纳皮尔 1550 1617年 苏格兰数学家 对数的
  • GBK/GBK2312字库寻址及使用原理

    一 字符编码 1 1 ASCII编码 我们知道 我们所见到的所有字符编码 对于计算机来说都是0 1 更具不同位上的0 1 一个字节 8位 共有256中排列方式 因此一个字节就可以表示256个不同的字符 在这个前提下 ASCII编码就由美国制
  • 因材施教,有道发布“子曰”教育大模型,落地虚拟人口语教练等六大应用

    因材施教的教育宗旨下 大模型浪潮中 网易有道凭借其对教育场景的深入理解和对商业化的理性思考 为行业树立了垂直大模型的典范 7月26日 教育科技公司网易有道举办了 powered by 子曰 教育大模型应用成果发布会 会上重磅推出了国内首个教
  • 游戏与创新

    一 严肃游戏的概念 严肃游戏的出现 最早可以追溯到公元前1400年 当时在古埃及 有一款名为播棋的棋类游戏 这种游戏以植物种子或石子作为道具 在地面或棋盘上 目的是把对方的棋子吃掉 同时 播棋也在日常交易中 被用作计算数量的商业辅助工具 严
  • 5G 速率介绍

    本文就对如何计算最大速率不做介绍 主要介绍的是NSA和SA速率的差别 以及上下行速率的差异 由于5G单用户下行可以到4流 上行可以到2流 而且上下行都支持256QAM 2 6G频率 5ms单周期 配置下 NSA和SA终端下行峰值速率约1 6
  • 用FFmpeg制作WebP动图

    去年写过一篇文章 是教大家用FFmpeg制作GIF动画的 今天在讨论到项目中碰到的一个 apng动画素材引起的程序崩溃时 有位同学建议 我们为啥不用WebP来代替 apng 是啊 why not 网上搜到一篇文章 自己试了一下 发现强大的F
  • SQL Server Management Studio (SSMS) 指定端口Port连接, 用逗号, 例如: localhost,1433

    Microsoft SQL Server Management Studio SSMS 指定端口连接 用 逗号 例如 localhost 1433 localhost 等效 localhost 逗号 1433
  • QT 解决“ qt creator 修改UI后,运行无改变”问题

    只需要将 项目 中的 Shadow build 勾选去掉 重新构建项目 运行即可看到修改后的效果
  • 三、-切换frame&css选择器

    等待元素出现 隐式等待 用WebDriver 对象的implicitly wait方法 这个方法有一个参数 指明等待最长时间 driver implicitly wait 10 显式等待 Selenium里面还有一种称之为显式等待的 可以为