首页 > 编程语言 >python+playwright 学习-22理解Locator 定位机制与元素句柄 ElementHandle

python+playwright 学习-22理解Locator 定位机制与元素句柄 ElementHandle

时间:2023-03-08 09:12:24浏览次数:34  
标签:定位 playwright 22 DOM 句柄 元素 ElementHandle page

前言

ElementHandle 表示页内 DOM 元素。ElementHandles 可以使用page.query_selector()方法创建。
如果你能理解ElementHandle 和 Locator 定位机制,那也就明白了selenium的定位方式 和 playwright 定位方式的本质区别。

ElementHandle 元素句柄

ElementHandle 表示页内 DOM 元素,ElementHandle 实例可以用作page.eval_on_selector()和page.evaluate()方法中的参数。
可以使用page.query_selector()方法创建。

href_element = page.query_selector("a")
href_element.click()

在下面的示例中,句柄指向页面上的特定 DOM 元素。如果那个元素改变了文本或者被 React 用来渲染一个完全不同的组件,句柄仍然指向那个 DOM 元素。这可能会导致意外行为。

handle = page.query_selector("text=Submit")
handle.hover()
handle.click()

学到这里大家也就明白了,为什么用selenium去循环操作页面元素的时候,只有第一次能操作,当页面刷新时,你定位的对象是上个页面的DOM元素对象。
所以虽然你定位对了,但是句柄发生了改变,也就无法找到指定的元素了。

如果还是不能理解,再给大家讲下 selenium 采用的是 http 协议,获取的元素句柄是固定的,不能实时去获取页面上的元素

playwright 采用的是webscoket 协议,可以实时去获取页面元素,当DOM结构有更新的时候,也能重新获取到

所以不鼓励使用 ElementHandle,而是使用Locator对象和网络优先断言

Locator 定位器

使用定位器,每次element使用时,最新的 DOM 元素都会使用选择器定位在页面中。所以在下面的代码片段中,底层 DOM 元素将被定位两次。

locator = page.get_by_text("Submit")
locator.hover()
locator.click()

定位机制不一样,所以 playwright 定位元素的时候比 selenium 更稳定。

标签:定位,playwright,22,DOM,句柄,元素,ElementHandle,page
From: https://www.cnblogs.com/yoyoketang/p/17190635.html

相关文章

  • 2022.3.7学习总结
    按照我们敬爱的建民老师的要求,我对我的UI交互界面做了一些优化,包括两个方面,首先是按钮的风格,接着又解决了标题栏的问题。 由于能力有限,暂时设计不出更加漂亮的标题栏,于......
  • 计算(2+22+222······)类似的式子
    intmain(){intp=0;//设的数字inti=0;intz=0;intd=0;//自定义前几项intr=0;//一项scanf("%d%d",&p,&d);for(i=0;i<d;i++){r=......
  • UVA - 227
    PuzzleUVA-227题目大意开始有一个5*5的网格,其中有一个格子是空的也就是空格键,其余都是字母,A->空格向上走;B->向下走;L->向左走;R->向右走,先输出"Puzzle#X:",越界就输出......
  • 山东csp-j2022 试题答案及视频讲解
    山东csp-j2022试题答案及视频讲解T319771植树节(planting)山东CSP-J2022入门组1题目链接:https://www.luogu.com.cn/problem/T319771题目讲解:#include<iostream>#inc......
  • 2022虚拟人应用与实践报告
    导读:原文《2022虚拟人应用与实践报告》,本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考          ......
  • ubuntu22.04安装mysql
    1.安装sudoaptinstallmysql-server2.设置vim /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]后加入skip-grant-tables3.重启服务servicemysqlrestart4.免密码......
  • 0225-0306函数
    0225-0303函数1.函数函数就类似于一个工具,提前准备好,方便后续使用函数解决的问题:1.解决代码冗余问题2.兼容性更强3.修改更方便2.函数语法结构defmy_func(a,b):......
  • MySQL用户新建表报1227异常
    1、MySQL8新建用户createuser'firestone'@'%'identifiedby'123456';2、给用户授予test库所有权限grantallprivilegesonfirestone_pretank.*to'firestone'@'%';3......
  • 串口通信原理详解232、422、485,入门必看!
    串口通信原理详解232、422、485,入门必看!混说Linux ​关注他 53人赞同了该文章本文介绍了串口通讯的基本概念、数据格式、通讯方式、典型的串口通讯......
  • 22个受欢迎的Python不同类型开源框架
    22个受欢迎的Python不同类型开源框架记录:一、PythonWeb框架Django:PythonWeb应用开发框架链接:https://www.djangoproject.com/Django应该是最出名的Python框架,GAE甚......