【python自动化】Playwright基础教程(七)Keyboard键盘

news2024/11/17 5:20:48

【python自动化】Playwright基础教程(七)Keyboard键盘

playwright模拟键盘操作

键盘事件提供了用于管理虚拟键盘的API,高级API是keyboard.type(),它使用的是原始字符再页面上生成对应的keydownkeypress / inputkeyup 事件。

模拟真实键盘操作进行更精细的控制可以使用keyboard.down()keyboard.up()keyboard.insert_text() 手动触发事件。

本文目录

文章目录

  • 【python自动化】Playwright基础教程(七)Keyboard键盘
    • playwright系列回顾
    • 前文代码
    • 官方示列一
    • 官方示列二
    • 官方示列三
    • 按下按键down
    • 插入文本insert_text
    • 按压操作press
    • 输入操作type
    • 释放(抬起)按键up
    • 键盘操作测试网站

playwright系列回顾

playwright连接已有浏览器操作

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

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

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

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

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

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

前文代码

直接定位指定浏览器

class Demo05:
    def __init__(self):
        """
        使用playwright连接谷歌浏览器
        :return:
        """
        self.playwright = sync_playwright().start()
        # 连接已经打开的浏览器,找好端口
        browser = self.playwright.chromium.connect_over_cdp("http://127.0.0.1:9223")
        self.default_context = browser.contexts[0]
        self.page = self.default_context.pages[0]

启动新的浏览器

class Demo06:
    def __init__(self, url):
        playwright = sync_playwright().start()
        browser = playwright.chromium.launch(headless=False)
        context = browser.new_context()
        self.page = context.new_page()
        self.page.goto(url)
       
        
if __name__ == '__main__':
    mwj = Demo05(url="指定的url")
    mwj.Locator_testid()

官方示列一

这里官网提供了一个示列:(我加了非常详细的注释)

# 模拟键盘输入 Hello World!
page.keyboard.type("Hello World!")
# 模拟键盘按下 ← 建
page.keyboard.press("ArrowLeft")
# 模拟键盘按下 Shift 键
page.keyboard.down("Shift")
# 模拟键盘按下 6次 ← 键
for i in range(6):
    page.keyboard.press("ArrowLeft")
# 模拟键盘释放 Shift 键
page.keyboard.up("Shift")
# 模拟键盘按下 Backspace 键
page.keyboard.press("Backspace")
# 最后呈现的整体效果就是
# 输出Hello World!选中了 World 并且删除,最后剩下 Hello!
# 大家可以自己用按键按照上面的中文操作一遍,就知道代码的意思啦。

官方示列二

按出大写的A。

page.keyboard.press("Shift+KeyA")
# or
page.keyboard.press("Shift+A")

官方示列三

使用键盘触发全选。

# 在windows或者linux系统使用
page.keyboard.press("Control+A")
# 在MacOS系统使用
page.keyboard.press("Meta+A")

按下按键down

使用方法

keyboard.down(key)

key参数

dispatch一个keydown事件。

key可以指定预期的keyboardEvent.key(https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key)值或单个字符生成的文本。

可以找到key值的超集(https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key/Key_Values)。

键的例子如下:

`F1` - `F12`, `Digit0`- `Digit9`, `KeyA`- `KeyZ`, `Backquote`, `Minus`, `Equal`, `Backslash`, `Backspace`, `Tab`,
`Delete`, `Escape`, `ArrowDown`, `End`, `Enter`, `Home`, `Insert`, `PageDown`, `PageUp`, `ArrowRight`, `ArrowUp`,

还支持以下修改快捷方式:ShiftControlAltMetaShiftLeft

按下Shift将键入大写字母key对应的文本。

如果key是单个字符,它是区分大小写的,因此值aA将生成不同的值文本。

如果key是修饰键、ShiftMetaControlAlt,则会发送后续的按键修饰,要释放修改键,使用keyboard.up()

按键按下一次后,后续对keyboard.down()的调用将会重复设置为true。要解开key,需要使用keyboard.up()

注意修改键会影响keyboard.down。按下Shift将以大写字母输入文本。

插入文本insert_text

只是input时间,不会触发键盘的down、up事件

使用方法

page.keyboard.insert_text("嗨")

按压操作press

在大多数情况下,应该使用locator.press()

可以理解为keyboard.down() 和 keyboard.up() 的快捷方式。

使用方法

page.keyboard.press(key)

这里的key和down里面的可以一样,不过这个key可以是组合技。

官方示列

page = browser.new_page()
page.goto("https://keycode.info")
page.keyboard.press("a")
page.screenshot(path="a.png")
page.keyboard.press("ArrowLeft")
page.screenshot(path="arrow_left.png")
page.keyboard.press("Shift+O")
page.screenshot(path="o.png")
browser.close()

官方这个网址很nice哦

image-20230915145053873

输入操作type

官方推荐使用locator.fill(),这在之前的文章中有讲,这里不再赘述。

官方示列

page.keyboard.type("Hello") # 瞬间输入
page.keyboard.type("World", delay=100) # 模拟用户,每个字符间隔100毫秒进行输入

需要注意的是,修饰键在这个方法里面不起作用,比如按住Shift再输字母不会输入大写字母。

释放(抬起)按键up

一般和按下按键down一起前后使用,对keyboard.down(key)进行释放。

使用方法

keyboard.up(key)

示列

# 按下 Shift 键
keyboard.down("Shift")
# 抬起释放 Shift 键
keyboard.up("Shift")

键盘操作测试网站

https://cps-check.com/cn/test-keyboard

image-20230915183555002

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

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

相关文章

Java面向对象(进阶)-- Object类的详细概述

文章目录 一、如何理解根父类二、 Object类的方法(1)引子(2)Object类的说明 三、了解的方法(1)clone( )1、介绍2、举例 (2)finalize( )1、介绍2、举例 (3)get…

windows系统用于 SDN 的软件负载均衡器 (SLB)

适用于:Azure Stack HCI 版本 22H2 和 21H2;Windows Server 2022、Windows Server 2019、Windows Server 2016 软件负载均衡器包括哪些内容? 软件负载均衡器提供以下功能: 适用于北/南和东/西 TCP/UDP 流量的第 4 层 (L4) 负载均…

什么是会话固定以及如何在 Node.js 中防止它

什么是会话固定以及如何在 Node.js 中防止它 在深入讨论之前,我们需要了解会话是什么以及会话身份验证如何工作。 什么是会话? 正如我们所知,HTTP 请求是无状态的,这意味着当我们发送登录请求时,并且我们有有效的用…

@CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思

@CacheInvalidate 注解是 JetCache 框架提供的注解,它是由阿里巴巴开源的组织 Alibaba Group 开发和维护的。JetCache 是一款基于注解的缓存框架,提供了丰富的缓存功能和灵活的配置选项,可用于增强应用程序的性能和可扩展性。JetCache 支持多种缓存后端,包括内存缓存、Redi…

2023亚太杯数学建模C题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料5 最后 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 2023年第十三…

二十、泛型(6)

本章概要 问题 任何基本类型都不能作为类型参数实现参数化接口转型和警告重载基类劫持接口 自限定的类型 古怪的循环泛型自限定参数协变 问题 本节将阐述在使用 Java 泛型时会出现的各类问题。 任何基本类型都不能作为类型参数 正如本章早先提到的,Java 泛型的…

OpenCV 笔记(6):像素间的基本关系——邻域、邻接、通路、连通、距离

像素是图像的基本元素,像素与像素之间存在着某些联系,理解像素间的基本关系是数字图像处理的基础。常见的像素间的基本关系包括:邻域、邻接、通路、连通、距离。 Part11. 邻域 邻域表示了像素之间的连接关系。 像素(x,y)的邻域,是…

Linux技能篇-软链接和硬链接

文章目录 前言一、硬链接是什么?二、软链接是什么?三、硬链接和软链接的区别和共性1.区别2.共同点 总结 前言 在Linux系统中,有两个容易混淆的概念,就是软链接(Soft Link)和硬链接(Hard Link&a…

android studio新版本gradle Tasks找不到assemble

最近需要打包arr,但android studio新版本为了加快编译速度,取消了gradle下的assemble任务,网上还没有博主更新解决方案,因此一直找不到解决方案,后来尝试如下操作才解决,方便后来者解决。 先将这里勾选上&…

vscode远程linux安装codelldb

在windows上使用vscode通过ssh远程连接linux进行c调试时,在线安装codelldb-x86_64-linux.vsix扩展插件失败,原因是linux服务器上的网络问题,所以需要进行手动安装。 首先在windows上下载: codelldb-x86_64-linux.vsix;…

GoldWave v6.78 绿色免费便携版功能介绍及使用说明

GoldWave v6.78 绿色免费便携版是一款集声音编辑、播放、录制与转换为一体的音频编辑工具,还可以对音频内容进行转换格式等处理。该软件支持许多格式的音频文件,包括WAV, OGG, VOC, IFF, AIF, AFC, AU, SND, MP3,MAT, DWD, SMP, VOX, SDS, AVI, MOV等音频…

vue v-model

一、为什么使用v-model? v-model指令可以在表单input、textarea以及select元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。本质上是语法糖,负责监听用户的输入事件来更新数据。 二、什么场景下会使用v-model? ①…

7.外部存储器,Cache,虚拟存储器

目录 一. 外部存储器 (1)磁盘存储器 1.磁盘的组成 2.磁盘的性能指标 3.磁盘地址 4.硬盘的工作过程 5.磁盘阵列 (2)固态硬盘(SSD) 二. Cache基本概念与原理 三. Cache和主存的映射方式 &#xff…

RabbitMQ-基础篇-黑马程序员

代码: 链接: https://pan.baidu.com/s/1nQBIgB_SbzoKu_XMWZ3JoA?pwdaeoe 提取码:aeoe 微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中,调…

OCR转换技巧:如何避免图片转Word时出现多余的换行?

在将图片中的文字识别转换为Word文档时,我们很多时候时会遇到识别内容的一个自然段还没结束就换行的问题,这些就是我们常说的多余换行的问题。为什么会产生这个问题呢?主要是由于OCR返回的识别结果是按图片上的文字换行而换行,而不…

解决Mac配置maven环境后,关闭终端后环境失效的问题(适用于所有终端关闭后环境失效的问题)

目录 问题的原因 解决方式一、每次打开终端时输入:"source ~/.bash_profile",这个方式比较繁琐 解决方式二、我们终端输入"vim ~/.zshrc"打开".zshrc"文件 1、我们输入以下代码: 2、首先需要按 " i…

【java:牛客每日三十题总结-7】

java:牛客每日三十题总结 总结如下 总结如下 执行流程如下:创建HttpServlet时需要覆盖doGet()和doPost请求 2. request相关知识 request.getParameter()方法传递的数据,会从Web客户端传到Web服务器端,代表HTTP请求数据;request.…

保姆级使用vuedraggable三方组件

第一步 引入vuedraggable npm i vuedraggable -S 第二步 直接使用&#xff0c;源码如下 <template><draggableclass"list-group"tag"ul"v-model"list"v-bind"{animation: 1000,group: description,disabled: false,ghostClass:…

软路由R4S+iStoreOS实现公网远程桌面局域网内电脑

软路由R4SiStoreOS实现公网远程桌面局域网内电脑 文章目录 软路由R4SiStoreOS实现公网远程桌面局域网内电脑简介 一、配置远程桌面公网地址配置隧道 二、家中使用永久固定地址 访问公司电脑具体操作方法是&#xff1a;2.1 登录页面2.2 再次配置隧道2.3 查看访问效果 简介 上篇…

Load-balanced-online-OJ-system 负载均衡的OJ系统项目

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 本项目Github地址 - Load-balanced-o…