【python自动化】Playwright基础教程(五)事件操作②悬停输入清除精讲

news2024/9/21 0:36:26

【python自动化】Playwright基础教程(五)事件操作②悬停&输入&清除精讲

本章目录

文章目录

  • 【python自动化】Playwright基础教程(五)事件操作②悬停&输入&清除精讲
    • 鼠标悬停 - hover
      • 鼠标悬停实战
    • 输入内容 - fill
      • 输入内容实战
      • 清空内容实战
    • 输入内容 - type
      • 模拟按键输入内容实战
    • 清除 - clear
      • 清除内容实战
    • playwright系列回顾

鼠标悬停 - hover

有些元素,只有你鼠标移动到它那个位置上,他才会展开或者显示一些内容,这时候就要用到hover操作了。

使用方法

page.get_by_role("link").hover()

参数

参数类型释义
forcebool是否绕过可操作性检查。默认值为 false
modifiersList[“Alt”, “Control”, “Meta”, “Shift”]要按下的键,有四个可供选择。
no_wait_afterbool可以通过设置此标志来选择退出等待,只有在特殊情况下(例如导航到无法访问的页面)才需要此选项。默认值为 false
positionDict{x: float, y: float}
timeoutfloat最长等待时间,单位毫秒,默认值为30000(30秒)。
trialbool设置后,此方法仅执行可操作性检查并跳过操作。默认值为 false 。等到元素可以执行操作时再执行。

可操作性检查表:https://playwright.dev/python/docs/actionability

此方法详细执行步骤

  • 等待元素的可操作性检查,除非force设置为true
  • 如果需要的话,将元素滚动到视图中。
  • 使用page.mouse将鼠标悬停在元素的中心位置,或者是position所指定的位置。
  • 等待启动的导航成功或四百,除非no_wait_after设置为true

鼠标悬停实战

**案列:**打开百度首页,鼠标放置在左上角的更多位置(悬浮),会显示出百度的其他产品。

需实现效果展示:

image-20230913155504225

代码流程

1、首先我们看一下更多这个元素如何定位

<a href="http://www.baidu.com/more/" name="tj_briicon" class="s-bri c-font-normal c-color-t" target="_blank">更多</a>

2、可以通过文本定位(但页面上有三个更多),这里这个更多是第一个,我们可以使用nth(0)或者first进行定位

  • self.page.get_by_text("更多").nth(0).hover()
    
  • self.page.get_by_text("更多").first.hover()
    

3、可以通过class定位,唯一

  • self.page.locator("[class='s-bri c-font-normal c-color-t']").hover()
    

4、可以通过name定位,唯一

  • self.page.locator("[name='tj_briicon']").hover()
    

在这里,class和name我均是使用的xpath定位,这个不熟悉的小伙伴可以单独学习一下。

Xpath我常用的:

使用元素的属性来定位元素,可以通过 [@属性名='属性值'] 的方式。
示例://input[@id='username'] 选取 id 属性为 “username” 的 input 元素。

xpath文本定位

完全匹配文本 //*[text()=“登录”]

包含某个文本 //*[contains(text(),“登录”)]

完整代码

def hover_operate(self):
    # 通过文本定位
    # self.page.get_by_text("更多").nth(0).hover()
    # self.page.get_by_text("更多").first.hover()
    # 通过class定位
    # self.page.locator("[class='s-bri c-font-normal c-color-t']").hover()
    # 通过name定位
    self.page.locator("[name='tj_briicon']").hover()

输入内容 - fill

在输入框中输入一个值。类似于selenium中的send_keys()

使用方法

# 在textbox中填入 梦无矶
page.get_by_role("textbox").fill("梦无矶")

参数

参数类型释义
valuestr可输入文本的元素中需要输入的内容
forcebool是否绕过可操作性检查。默认值为 false
no_wait_afterbool可以通过设置此标志来选择退出等待,只有在特殊情况下(例如导航到无法访问的页面)才需要此选项。默认值为 false
timeoutfloat最长等待时间,单位毫秒,默认值为30000(30秒)。

此方法详细执行步骤

  • 此方法会先进行可操作性检查(force为默认值时),聚焦元素,对目标元素进行input输入。
  • 如果你想清空此元素的内容,你可以传入空字符串,value = ""
  • 如果目标元素无法输入文本,将会引发错误。
  • 想要更加细致的输入操作,如模仿人为输入(每个字符之间有输入时间间隔),可以使用locator.type()

输入内容实战

**案例:**在搜素框输入梦无矶的测试开发之路

搜索框网页源码:

<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">

定位

1、根据ID定位

self.page.locator("#kw")

2、class定位

self.page.locator(".s_ipt")

3、xpath定位

self.page.locator("//input[@name='wd']")
# 或
self.page.locator("//input[@id='kw']")
# 或
self.page.locator("[class='s_ipt']")

想不到吧,小小的一个搜索框竟然有如此多的定位方式。

完整代码

def fill_operate(self):
    # id定位
    self.page.locator("#kw").fill("梦无矶的测试开发之路")
    # 也可以这样写
    self.page.fill("#kw","梦无矶的测试开发之路")
    
    # class定位
    # self.page.locator("[class='s_ipt']").fill("梦无矶的测试开发之路")
    # self.page.locator(".s_ipt").fill("梦无矶的测试开发之路")
    
    # xpath定位
    # self.page.locator("//input[@name='wd']").fill("梦无矶的测试开发之路")
    # self.page.locator("//input[@id='kw']").fill("梦无矶的测试开发之路")

执行效果展示

image-20230913165128967

清空内容实战

通过参数我们可以发现,text如果传入一个空值,那么就是进行内容清空。

这里我们先输入一段文本,再输入一个空字符。

执行后发现确实被清空了。教程代码,如果在学习的小伙伴,建议自己写一下运行一下,这些代码我都辛辛苦苦调试好了的,不学好浪费啊!

def fill_clear(self):
    # 先输入内容
    self.page.locator("//input[@name='wd']").fill("梦无矶的测试开发之路")
    # 为了看清楚操作,这里加一个等待
    self.page.wait_for_timeout(2000)
    # 清空内容
    self.page.locator("//input[@name='wd']").fill("")

输入内容 - type

Tips

  • 官方建议使用locator.fill()进行输入,只有当页面上需要执行特殊的按键操作的时候,才使用locator.type()
  • 聚焦元素,输入文本时为文本中的每个字符执行 keydown, keypress/input, and keyup 事件。
  • 若需要执行其他的特殊按键,比如Control,ArrowDown,请使用locator.press()。在后续章节我们会讲到。

使用方法

element.type("hello") # 瞬间输入完毕
element.type("world", delay=100) # 像用户一样缓慢输入,每个字符间隔100毫秒

参数

参数类型释义
textstr在目标元素要输入的文本
delayfloat两次按键之间的等待时间(单位为毫秒),默认为0毫秒。
no_wait_afterbool可以通过设置此标志来选择退出等待,只有在特殊情况下(例如导航到无法访问的页面)才需要此选项。默认值为 false
timeoutfloat最长等待时间,单位毫秒,默认值为30000(30秒)。

模拟按键输入内容实战

依旧是使用fill操作中的搜索框进行输入。

完整代码

def type_operate(self):
    # 效果和fill一样
    # self.page.locator("#kw").type("梦无矶的测试开发之路")
    # 每个字符之间会停顿300毫秒
    self.page.locator("#kw").type(text="梦无矶的测试开发之路", delay=300)

最终会在输入框中输入梦无矶的测试开发之路。这里就不截图了。

清除 - clear

清除输入字段

使用方法

# 清空textbox中的内容
page.get_by_role("textbox").clear()

参数

参数类型释义
textstr在目标元素要输入的文本
forcebool是否绕过可操作性检查。默认值为 false
no_wait_afterbool可以通过设置此标志来选择退出等待,只有在特殊情况下(例如导航到无法访问的页面)才需要此选项。默认值为 false
timeoutfloat最长等待时间,单位毫秒,默认值为30000(30秒)。

清除内容实战

这个清除是不是很像我们的fill传入控制符?

这里我们依然是在搜索框中输入内容,再清空。

def clear_operate(self):
    # 先输入一段文本
    self.page.locator("//input[@name='wd']").fill("梦无矶的测试开发之路")
    # 为了看清楚操作,这里加一个等待
    self.page.wait_for_timeout(2000)
    # 清除内容
    self.page.locator("//input[@name='wd']").clear()

playwright系列回顾

playwright连接已有浏览器操作

selenium&playwright获取网站Authorization鉴权实现伪装requests请求

【python自动化】playwright长截图&切换标签页&JS注入实战

【python自动化】Playwright基础教程(二)快速入门

【python自动化】Playwright基础教程(三)定位操作

【python自动化】Playwright基础教程(四)事件操作①元素高亮&元素匹配器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1202826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

stm32超声波测距不准的解决方法(STM32 delay_us()产生1us)及stm32智能小车超声波测距代码(C语言版本)

首先要说明一下原理&#xff1a;使用stm32无法准确产生1us的时间&#xff0c;但是超声波测距一定要依赖时间&#xff0c;时间不准&#xff0c;距离一定不准&#xff0c;这是要肯定的&#xff0c;但是在不准确的情况下&#xff0c;要测量一个比较准确的时间&#xff0c;那么只能…

内网穿透的应用-如何使用CFImagehost搭建简洁易用的私人图床并公网访问

文章目录 1.前言2. CFImagehost网站搭建2.1 CFImagehost下载和安装2.2 CFImagehost网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测…

北斗卫星为油气管道安全保障提供可靠技术支持

北斗卫星为油气管道安全保障提供可靠技术支持 随着现代社会对能源需求的不断增长&#xff0c;油气管道成为了能源输送的重要通道。然而&#xff0c;油气管道的安全风险也日益凸显。为了及时掌握油气管道的运行状态并有效地监测其安全状况&#xff0c;北斗卫星技术为油气管道监测…

VMware 虚拟机启动后自动重启电脑 问题的2个解决办法

我遇到的问题&#xff1a; vm配置好了新的虚拟机&#xff0c;不过点击启动虚拟机的时候电脑自动重启。无线点击启动、无限重启&#xff01; 如有帮助 请点赞收藏关注我&#xff01;谢谢啦 如有转载请注明出处&#xff01; 我的解决办法&#xff1a; 1编辑虚拟机设置 硬件选项…

解决npm报错Error: error:0308010C:digital envelope routines::unsupported

解决npm报错Error: error:0308010C:digital envelope routines::unsupported。 解决办法&#xff1b;终端执行以下命令&#xff08;windows&#xff09;&#xff1a; set NODE_OPTIONS--openssl-legacy-provider然后再执行 npm命令成功&#xff1a;

阿里云服务器白嫖还是选99元特价主机?

阿里云服务器0元到手攻略&#xff0c;咱别0元了&#xff0c;花点钱吧&#xff0c;99元行吗&#xff1f;不行也有0元的&#xff0c;一会阿腾云atengyun.com给大家细说。先说99元即可购买一台阿里云服务器&#xff0c;2核2G配置、3M固定带宽、40G系统盘&#xff0c;第二年续费还是…

印刷包装服务预约小程序的作用是什么

印刷包装厂家非常多&#xff0c;其主要服务为名片印刷、礼品纸袋定制、画册宣传单印刷等&#xff0c;这些服务对大多数企业都有很高的需求&#xff0c;同时具备批量、长期合作属性&#xff0c;同时具备跨区域合作性&#xff0c;所以品牌可扩展度高。 但高需求的同时&#xff0…

【机器学习】K近邻算法:原理、实例应用(红酒分类预测)

案例简介&#xff1a;有178个红酒样本&#xff0c;每一款红酒含有13项特征参数&#xff0c;如镁、脯氨酸含量&#xff0c;红酒根据这些特征参数被分成3类。要求是任意输入一组红酒的特征参数&#xff0c;模型需预测出该红酒属于哪一类。 1. K近邻算法介绍 1.1 算法原理 原理&a…

【GEE学习日记】GEE下载ERA5指定小时数据

1 背景 ERA5数据集提供了逐小时的气象产品&#xff0c;最近做实验需要用到指定日期的14点的气象数据&#xff0c;所以学习了一下。 我的目的&#xff1a;获取2003年每月5&#xff0c;15&#xff0c;25日 14点的空气温度 2 代码 var roi table.geometry(); // table是我上传…

Facebook个人主页和公共主页的区别

Facebook个人主页和公共主页是两种不同类型的页面&#xff0c;它们在功能、用途和管理方面上都是存在着一些明显的区别。本文小编则对他们的区别介绍一下。 首先&#xff0c;个人主页是供普通用户使用的&#xff0c;用于展示个人信息和与朋友、家人保持联系。个人主页通常包括…

curl使用

文章目录 前言一、curl use case常见参数项包括&#xff1a; 二、下载操作我使用第一种方式&#xff1a;不验证证书&#xff0c;果然下载下来了。而且是下载到当前的工作文件夹。C:\Users\xxx\test.zip如果自己想指定文件地址 前言 使用 curl 工具 一、curl use case 常见参数…

编程最佳外挂:批量数据分析与可视化,CodeGeeX工具箱一键完成

ChatGLM3代模型的Code Interpreter能力&#xff0c;本周已经在VSCode里的CodeGeeX插件产品中&#xff0c;以开发者工具箱的产品形态上线。 下图以VSCode插件为例&#xff1a;在CodeGeeX的侧边栏&#xff0c;和智能问答AskCodeGeeX并列出现的工具箱标签&#xff0c;用户登录后就…

【第2章 Node.js基础】2.4 Node.js 全局对象(二)之,process 对象

process 对象 process对象是一个全局对象&#xff0c;提供当前Node.js 进程信息并对其进行控制。通常用于编写本地命令行程序。 1.进程事件 process对象是EventEmitter类的实例&#xff0c;因此可以使用事件的方式来处理和监听process对象的各种事件。以下是一些常用的proce…

Web APIs——综合案例学生就业统计表

1、学生就业统计表 2、渲染业务 根据持久化数据渲染页面 步骤&#xff1a; ①&#xff1a;读取localstorage本地数据 如果有数据则转换为对象放到变量里面一会使用它渲染页面如果没有则用默认空数组[]为了测试效果&#xff0c;可以先把initData存入本地存储看效果 ②&…

图文多模态大模型综述

自去年底ChatGPT发布后&#xff0c;大模型技术呈井喷式发展态势&#xff0c;学术界和工业界几乎每天都在刷新各个方向的SOTA榜单。随着大模型技术的发展&#xff0c;人们逐渐意识到多模态将是大模型发展的必经之路。其中&#xff0c;图文多模态大模型是一种结合了图像和文本两种…

vivado时序分析-3时序分析关键概念

1、时钟相移 时钟相移对应于延迟时钟波形 &#xff0c; 此波形与因时钟路径内的特殊硬件所导致的参考时钟相关。在 AMD FPGA 中 &#xff0c; 时钟相移通常是由 MMCM 或 PLL 原语引入的 &#xff0c; 前提是这些原语的输出时钟属性 CLKOUT*_PHASE 为非零值。 时序分析期间…

解锁海外网红营销的潜力:关于KOC合作的7大建议

随着社交媒体的崛起&#xff0c;海外网红营销已成为全球各行业的主要趋势之一。传统的广告渠道逐渐被社交媒体平台和网红吸引了大量的广告投放&#xff0c;因此企业需要不断创新&#xff0c;以吸引受众并保持竞争力。其中&#xff0c;KOC合作是一个备受关注的策略&#xff0c;它…

openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据库

文章目录 openGauss学习笔记-121 openGauss 数据库管理-设置密态等值查询-使用JDBC操作密态数据库121.1 连接密态数据库121.2 调用isValid方法刷新缓存示例121.3 执行密态等值查询相关的创建密钥语句121.4 执行密态等值查询相关的创建加密表的语句121.5 执行加密表的预编译SQL语…

程序员被问为什么单身的高赞回答

程序员们经常被问到为什么还单身 程序员们经常被问到为什么还单身 然后他们给出一个程序员风格的回答&#xff1a;“我在等待那个特殊的人&#xff0c;那个烧掉我的CPU&#xff0c;占满我的内存&#xff0c;并且把我的代码base都更新了的人。”#工作生活都在乎 #单身程序员的困…

MyBatis-Plus 系列

目录&#xff1a; 一、 Spring Boot 整合 MyBatis Plus 二、MyBatisPlus 多数据源配置 三、MybatisPlus —注解汇总 四、MyBatis Plus—CRUD 接口 五、MyBatis-Plus 条件构造器 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens …