这里是清安,本章一起来了解一下ifame标签,iframe多用于嵌套页面。最常见的就是登录窗口了。例如QQ空间,知乎的登录界面,都有用到。
本章主要以QQ空间为例,一起来看看:
进入Url:https://i.qq.com/。
方法一:按下F12,鼠标点击登录框,审查元素,就能看到iframe框了。
方法二:按下F12,CTRL+F,在搜索框中输入iframe,也能搜索到。
好了, 此处看了iframe标签了。我们如何来定位呢。上述图片中有id,有name属性,所以我们正常进行定位切换就好了。
from selenium import webdriverfox = webdriver.Firefox()
fox.get("https://i.qq.com/")
# 定位标签
ifranme = fox.find_element_by_id('login_frame')
# 切换到标签上
fox.switch_to.frame(ifranme)
fox.find_element_by_id('switcher_plogin').click()
fox.find_element_by_id('u').send_keys('清安无别事')
fox.find_element_by_id('p').send_keys('欢迎入坑')fox.quit()
此处是一个小例子,我们使用switch_to.frame()可以切入到标签内部,然后进行各种操作。实际上可能会遇见没有任何属性的iframe,所以这时候就要考虑到标签定位了。这里回到了元素定位基础了,就不作多的阐述了。
往后还可能遇到一个HTML中存在多个iframe标签的情况,善于结合Python,Selenium基础来书写代码。原理都是一样的。
那么切入进去之后如何切出呢,或者还有其他的办法切入吗。 答案是有的。看封装好的一个小例子。这里就不解释如何封装的了,可以直接看看Python系列,有讲。
# -->>>清安<<<---
from selenium import webdriver
from selenium.webdriver.common.by import By
from time import sleep
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWaitclass Test(object):def __init__(self):self.fox = webdriver.Firefox()self.fox.get('https://i.qq.com/')def get_element(self, ele, local):return self.fox.find_element(ele, local)def click_(self, ele, local):self.get_element(ele, local).click()def get_text(self, *local):sleep(1)txt = self.get_element(*local)print(txt.text)def frame_(self, ele, local):""":return: 切入frame"""sleep(1)self.fox.switch_to.frame(self.get_element(ele, local))def parent_frame(self):""":return: 切出frame"""sleep(1)# self.fox.switch_to.default_content()self.fox.switch_to.parent_frame()def wait_(self):""":return: 显示等待头部 """return WebDriverWait(self.fox, 10, 0.5)def wait_frame(self, ele, local):""":return: 显示等待+iframe标签的使用"""self.wait_().until(EC.frame_to_be_available_and_switch_to_it(self.get_element(ele, local)),message='iframe不可跳转')if __name__ == '__main__':t = Test() # 实例化类,直接打开urlt.frame_(By.ID, 'login_frame') # 定位iframe标签t.get_text(By.ID, 'switcher_plogin') # 获取文本信息t.click_(By.ID, 'switcher_plogin') # 点击操作t.get_text(By.ID, 'login_button') # 获取文本信息t.parent_frame() # 切出iframet.get_text(By.XPATH, "//*[text()='空间活动']") # 获取文本信息t.wait_frame(By.ID, 'login_frame') # 用iframe显示等待t.get_text(By.XPATH, '//*[text()="新用户注册"]') # 获取文本信息
此处举例了如何切出iframe,也就是parent_frame方法,里面介绍了两种方法。
self.fox.switch_to.parent_frame()是切换到父级,如果没有父级的iframe,那么保持默认,也就是说将焦点切出原iframe标签。
self.fox.switch_to.default_content()会直接将焦点切出iframe标签。
切出后我们就可以做其他的操作了。上述代码中,我们定位了“空间活动”,并打印了它的文本值。
上述代码中我们还用到了一个显示等待,也是有关iframe标签的,这也是一种切换方式。一起来看看源码:
class frame_to_be_available_and_switch_to_it(object):""" An expectation for checking whether the given frame is available toswitch to. If the frame is available it switches the given driver to thespecified frame."""def __init__(self, locator):self.frame_locator = locatordef __call__(self, driver):try:if isinstance(self.frame_locator, tuple):driver.switch_to.frame(_find_element(driver,self.frame_locator))else:driver.switch_to.frame(self.frame_locator)return Trueexcept NoSuchFrameException:return False
看源码中,简单点理解:如果self.frame_locator是元组,则进行切换,否则,还是切换,并返回True。都不对,则告诉你错误,返回False。所以啊,用了这个显示等待也就不需要另外写iframe标签切换了。也能不加强制等待、担心时间不够元素没渲染出来,导致脚本报错了。
总结
1、上述的封装中,并未用到较多的显示等待,而是简单的使用了强制等待,这是不值得提倡的。
2、封装的套路可以模仿,自己写一写。
3、大家记得写好注释
4、上述代码中,切换iframe还有很大的优化空间,可以自己试试如何优化
查看全文
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/2090353.html
如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!
相关文章:
iframe,别再说不会使用了
这里是清安,本章一起来了解一下ifame标签,iframe多用于嵌套页面。最常见的就是登录窗口了。例如QQ空间,知乎的登录界面,都有用到。 本章主要以QQ空间为例,一起来看看: 进入Url:https://i.qq.com……
PyTorch中的torch.nn.Parameter() 详解
PyTorch中的torch.nn.Parameter() 详解
今天来聊一下PyTorch中的torch.nn.Parameter()这个函数,笔者第一次见的时候也是大概能理解函数的用途,但是具体实现原理细节也是云里雾里,在参考了几篇博文,做过几个实验之后算是清晰了&am……
【小程序】低代码+小游戏=小游戏可视化开发
🥳 作者:伯子南 😎 坚信: 好记性不如乱笔头,独乐乐不如众乐乐 💪 个人主页:https://blog.csdn.net/qq_34577234?spm1010.2135.3001.5421 👬🏻 觉得博主文章不错的话&……
ROS 安装详细教程 —— Ubuntu22.0.4 LTS 安装
ROS 安装详细教程 —— Ubuntu22.0.4 LTS 安装 ROS 简介 官方文档对 ROS 的介绍如下: The Robot Operating System (ROS) is a set of software libraries and tools that help you build robot applications. From drivers to state-of-the-art algorithms, and wi……
【eNSP】win11解决virtualbox5.2.44无法安装、不兼容的问题
问题描述:
本人大三学生一枚,这学期上计算机网络,老师要求安装华为eNSP软件,安装环节一切顺利,直到安装到依赖组件中VirtualBox-5.2.44时,发生了问题,Windows提示此应用无法在此设备上运行&……
递归小案例
递归小案例
将一组深层次数据,每项数据单独提取出来,添加到一个新的数组当中去例: const json [{id: 1,title: "课程1",children: [{ id: 4, title: "课程1-1" },{id: 5,title: "课程1-2",children: [{ id: ……
vuex六种方法使用及场景
Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。 vuex的六种方法
state的使用方法及场景
方法作用state存放公共数据state的使用场景及方法 第一种方法:在元素中使用 <p>{{$store.state.name}}</p>第二种:……
深拷贝+浅拷贝+数据类型判断
深拷贝浅拷贝的原理 浅拷贝 浅拷贝就是对数据的复制 浅拷贝的使用方法 // 浅拷贝的方法let arr [1,2,3,4];let newArr arr;浅拷贝的缺点 当你创建一个新的变量newArr直接复制已有变量的数据时,你改变原变量arr数据,新的变量newArr数据也会发生改变&am……
01-Mac卸载Docker
声明: 本文用于本人技术学习和备忘。水平有限,如有错漏欢迎指正! 原创不易,如有转载请标注出处:https://blog.csdn.net/luyou0401/article/details/126564699 目录01-Mac卸载Docker官方文档文档摘录Uninstall Docker……
单线程、事件循环、微任务和宏任务
js单线程
js单线程就是同步和异步任务分别进入不同的执行环境,同步的进入主线程,即主执行栈,异步的进入任务队列。主线程内的任务执行完毕为空,会去任务队列读取对应的任务,推入主线程执行。
主线程 也就是 js 引擎执……
计算机笔试/面试常见逻辑题/智力题汇总
说明:按种类汇总,难度不分先后,做了分级罗列,方便后续扩充,大家有比较有意思的题目可以在讨论区讨论。 下面有的题题解相对复杂的直接参考了网上的一些解答,而有的题解我认为并不好的也做了补充,……
OpenAI文档翻译——搭建第一个自己的ChatGPT应用
这篇主要是讲了重头到位创建一个基于OpenAI API的应用程序的过程,同时给出了Node.js、Python版本的实例代码。应用程序的构建总体来说是很简单的就是一个接口调用,前提是我们需要提供密匙。
如果想要获取更好的结果返回一个是可以给模型提供一些列子从而……
python以及PyCharm工具的环境安装与配置
这里以Windows为例
Python的安装
当然是到Python官网下载咯,https://www.python.org/downloads/点我直达,如图: 可以下载最新版本,可以下拉找到之前特定的版本安装,如图: 这里先择的是最新版的进行安装……
JavaScript【六】JavaScript中的字符串(String)
文章目录🌟前言🌟字符串(String)🌟单引号和双引号的区别🌟属性🌟 length :字符串的长度🌟 方法🌟 str.charAt(index);🌟 str.charCodeAt(index);🌟 String.fromCharCode(……
获取文件MD5小案例(未拆分文件)
文章目录前端获取MD5后端获取MD5前端获取MD5
1、引入js
<script src"js/spark-md5.min.js" type"text/javascript"></script>注:spark-md5库GitHub链接 2、这里是一个按钮和被隐藏调的<input/>标签 <body><button……
Java 进阶(15)线程安全集合
CopyOnWriteArrayList
线程安全的ArrayList,加强版读写分离。
写有锁,读⽆锁,读写之间不阻塞,优于读写锁。
写⼊时,先copy⼀个容器副本、再添加新元素,最后替换引⽤。
使⽤⽅式与ArrayList⽆异。
示例……
HR:面试官最爱问的linux问题,看看你能答对多少
文章目录摘要Linux的文件系统是什么样子的?如何访问和管理文件和目录?如何在Linux中查看和管理进程?如何使用Linux命令行工具来查看系统资源使用情况?如何配置Linux系统的网络设置?如何使用Linux的cron任务调度器来执行……
vscode开发常用的工具栏选项,查看源码技巧以及【vscode常用的快捷键】
一、开发常用的工具栏选项
1、当前打开的文件快速在左侧资源树中定位: 其实打开了当前的文件已经有在左侧资源树木定位了,只是颜色比较浅 2、打开太多文件的时候,可以关闭 3、设置查看当前类或文件的结构 OUTLINE
相当于idea 查看当前类或接……
数据要素化条件之一:原始性
随着技术的发展,计算机不仅成为人类处理信息的工具,而且逐渐地具有自主处理数据的能力,出现了替代人工的数据智能技术。数据智能的大规模使用需要关于同一分析对象或同一问题的、来源于不同数据源的海量数据。这种数据必须是针对特定对象的记……
【面试题 高逼格利用 类实现加法】编写代码, 实现多线程数组求和.
编写代码, 实现多线程数组求和.关键1. 数组的初始化关键2. 奇偶的相加import java.util.Random;public class Thread_2533 {public static void main(String[] args) throws InterruptedException {// 记录开始时间long start System.currentTimeMillis();// 1. 给定一个很长的……
编程日记2023/4/16 14:56:10