Python-web自动化-Playwright的学习

在这里插入图片描述

Python-web自动化-Playwright的学习

        • 1. 安装playwright
        • 2. 界面等待
        • 3. 自动化代码助手
        • 4. 定位元素
          • 1. css selector定位
          • 2. xpath定位
          • 3. get_by_XXX定位
        • 5. 操作元素
          • 1. 单选框、复选框
          • 2. select下拉框
          • 3. 网页操作
          • 4. 框架页 frame
          • 5. 窗口切换
          • 6. 截屏

1. 安装playwright

pip命令

pip install playwright

之后还需要安装对应浏览器的驱动程序,使用命令

playwright install chromium

这是谷歌浏览器的驱动程序的下载
下面这是一段playwright-web自动化实例代码

from playwright.sync_api import sync_playwrightp = sync_playwright().start()
# 启动playwrite driver进程
browser = p.chromium.launch(headless=False)
# 驱动谷歌浏览器 启动浏览器
# headless = False 有界面的page = browser.new_page()
# 创建新页面
page.goto(url='https://www.baidu.com')page.locator('#kw').fill('科技')
# 定位输入框 输入科技
page.locator('#su').click()
# 点击搜索
# 关闭浏览器
browser.close()
# 关闭进程
p.stop()
2. 界面等待

不推荐使用time.sleep方法进行界面等待
因为playwright底层使用的是异步的python库进行各种事件处理,time.sleep会破坏异步框架的处理逻辑。
使用page对象的wait_for_timeout方法达到等待效果,单位为毫秒

page.wait_for_timeout(2000)
3. 自动化代码助手

输入命令

playwright codegen

相当于selenium中的selenium ide脚本录制工具
在这里插入图片描述

4. 定位元素
1. css selector定位

使用Locator类型的对象来进行定位元素,比如上述代码中

page.locator('#kw').fill('科技')
# 定位输入框 输入科技
page.locator('#su').click()
# 点击搜索

locator()就是,之后的fill、click属于元素操作,可以根据tag名、id、class选择元素,这种定位方式如果有一些html/css基础的,应该在定位元素方面基本没有问题,因为这个定位元素的表达式和css样式元素定位基本差不多的。
请添加图片描述

2. xpath定位

上述代码可以修改为:

page.locator('//input[@id="kw"]').fill('科技')
# 定位输入框 输入科技
page.locator('//input[@id="su"]').click()
# 点击搜索

有一定xpath基础绝对是没有问题的

3. get_by_XXX定位

在这里插入图片描述
get_attribute只是获取对应元素的某个属性值

5. 操作元素

1.click,点击元素(单击)、dblclick(双击元素)
2. fill,输入文本,clear,清空文本框中的内容,input_value,获取文本框中的内容
3. inner_text,获取元素内部文本
4. all_inner_texts,获取所有匹配的文本
5. text_centent、all_text_contents,和inner_text、all_inner_texts相对应,不同的是text_content、all_text_contents会匹配隐藏元素。

html代码:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>ceshi</title><style>ul{list-style:none;}</style>
</head>
<body><ul><li>混合</li><li style="display:block;">混合2</li><li>混合3</li><li>混合4</li></ul>
</body>
</html>

界面效果:
在这里插入图片描述

e1 = page.locator('//ul').all_text_contents()
e2 = page.locator('//ul').all_inner_texts()print(e1)
print(e2)

运行结果:
在这里插入图片描述

包含隐藏元素时:
在这里插入图片描述
运行结果:
在这里插入图片描述
6. inner_html,获取元素内部的HTML

e1 = page.locator('//ul').inner_html()print(e1)

在这里插入图片描述
7. 等待元素可见
有个时候我们的代码并不是操作某个元素,而是要等待某个元素出现后,再进行其他操作,可以使用wait_for方法
有两个参数,分别为state、timeout,state,默认值为‘visible’,等待元素可见,如果值为‘hidden’,等待元素消失。
timeout默认值为30秒,超出时长,元素还没有出现,会抛出错误。

8. 判断元素是否可见
is_visible,判断在当前页面是否存在某个元素

9. 文件输入框
通过set_input_files方法

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>ceshi</title>
</head>
<body><input type="file" name="" id="file">
</body>
<script type="text/javascript">const ele = document.querySelector('#file');ele.onchange = function(){let file = this.files[0];console.log(file);}
</script>
</html>
page.goto(url='file:///D:/Sublime/vscode/Test_learn/playwrite2/1.html')
#
file_ele = page.locator('#file')
file_ele.set_input_files(r'D:\Sublime\vscode\Test_learn\playwrite2\test1.py')

运行结果:
在这里插入图片描述

1. 单选框、复选框

单选框的选择

  • 如果要点选radio框,可以使用Locator对象的check方法
  • 如果要取消选radio框,可以使用Locator对象的uncheck方法
  • 如果要判断radio框是否被选中,可以使用Locator对象的is_checked方法
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>ceshi</title>
</head>
<body><input type="radio" name="gender" value="man" checked><input type="radio" name="gender" value="female"><br>
</body>
</html>
page.wait_for_timeout(2000)
for e in eles:print(e.is_checked(),e.get_attribute('value'))if not e.is_checked():e.check()# 如果没有选中
page.wait_for_timeout(10000)

运行结果:
在这里插入图片描述
复选框

  • 如果要点选checkbox框,可以使用Locator对象的check方法
  • 如果要取消选checkbox框,可以使用Locator对象的uncheck方法
  • 如果要判断checkbox框是否被选中,可以使用Locator对象的is_checked方法
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>ceshi</title>
</head>
<body><input type="checkbox" name="music" value="1"> 1 <br><input type="checkbox" name="music" value="2"> 2 <br><input type="checkbox" name="music" value="3"> 3 <br><input type="checkbox" name="music" value="4"> 4
</body>
</html>
eles = page.locator(selector='[name=music]').all()
page.wait_for_timeout(2000)
for e in eles:v = e.get_attribute('value')if int(v) % 2 == 0:e.check()

运行结果:
请添加图片描述

2. select下拉框

通过**select_option()**方法,里面的值可以是index、value、lable上的值,但是需要完全匹配才行。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>ceshi</title>
</head>
<body><select name="sex"><option value="man"></option><option value="female"></option></select>
</body>
</html>
page.goto(url='file:///D:/Sublime/vscode/Test_learn/playwrite2/1.html')
page.locator('[name=sex]').select_option(index=1)

默认什么都没有选择,显示为男,现在选择女
在这里插入图片描述

3. 网页操作
  • page.go_back() 后退
  • page.go_forward() 前进
  • page.reload() 刷新
4. 框架页 frame

使用frame_locator找到对应frame框架页
1.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>ceshi</title>
</head>
<body><iframe src="./2.html"></iframe>
</body>
</html>

2.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>ceshi2</title>
</head>
<body><p id="name">步文曜</p>
</body>
</html>
frame = page.frame_locator('iframe')
print(frame.locator('#name').inner_text())

运行结果:
在这里插入图片描述

5. 窗口切换

需要使用BrowserContext对象创建page

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>ceshi</title>
</head>
<body><p id="baidu">baidu</p><script>const e = document.querySelector('#baidu');e.onclick = function(){window.open('https://www.baidu.com');}</script>
</body>
</html>
page.locator('#baidu').click()
page.wait_for_timeout(2000)
print(context.pages[0].title())
print(context.pages[1].title())

运行结果:
在这里插入图片描述

6. 截屏

page.screenshot(path=‘’,full_page=True)
full_page=True,截屏截取不可见的部分,默认为False,只截取可见的部分。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

垃圾分类|城市垃圾分类管理系统|基于Springboot的城市垃圾分类管理系统设计与实现(源码+数据库+文档)

城市垃圾分类管理系统目录 目录 基于Springboot的城市垃圾分类管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、垃圾列表 2、公告信息管理 3、公告类型管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 …

(06)Hive——正则表达式

Hive版本&#xff1a;hive-3.1.2 一、Hive的正则表达式概述 正则表达式是一种用于匹配和操作文本的强大工具&#xff0c;它是由一系列字符和特殊字符组成的模式&#xff0c;用于描述要匹配的文本模式。 Hive的正则表达式灵活使用解决HQL开发过程中的很多问题&#xff0c;本篇文…

代码随想录算法训练营第十七天|Leetcode110 平衡二叉树、Leetcode257 二叉树的所有路径、Leetcode404 左叶子之和

代码随想录算法训练营第十七天|Leetcode110 平衡二叉树、Leetcode257 二叉树的所有路径、Leetcode404 左叶子之和 ● Leetcode110 平衡二叉树● 解题思路● 代码实现 ● Leetcode257 二叉树的所有路径● 解题思路● 代码实现 ● Leetcode404 左叶子之和● 解题思路● 代码实现 …

esp8266-01s WIFI模块使用(一)- AT指令

时间记录&#xff1a;2024/2/15 一、注意事项 &#xff08;1&#xff09;使用英文双引号表示字符串数据 &#xff08;2&#xff09;默认波特率115200 &#xff08;3&#xff09;AT指令以“\r\n”结尾 &#xff08;4&#xff09;3.3V电源接口先连接单片机的3.3V&#xff0c;如…

7 大 Android 数据恢复软件,可轻松找回丢失的数据

每年&#xff0c;由于各种原因&#xff0c;数百万人从他们的 Android 设备中丢失数据。它可能像意外删除文件一样简单&#xff0c;也可能像系统崩溃一样复杂。在这种情况下&#xff0c;拥有高效的数据恢复工具可以证明是救命稻草。Mac 用户尤其需要找到与其系统兼容的软件。好消…

AtCoder Beginner Contest 335 (Sponsored by Mynavi) --- F - Hop Sugoroku -- 题解

目录 F - Hop Sugoroku 题目大意&#xff1a; 思路解析&#xff1a; 代码实现&#xff1a; F - Hop Sugoroku 题目大意&#xff1a; 思路解析&#xff1a; 容易想到这是一个dp题&#xff0c;然后初始转移方程为&#xff1a; 如果当a[i] 较大时&#xff0c;时间复杂度为 O(N…

ElasticSearch分词器和相关性详解

目录 ES分词器详解 基本概念 分词发生时期 分词器的组成 切词器&#xff1a;Tokenizer 词项过滤器&#xff1a;Token Filter 停用词 同义词 字符过滤器&#xff1a;Character Filter HTML 标签过滤器&#xff1a;HTML Strip Character Filter 字符映射过滤器&#x…

17.JS中的object、map和weakMap

1.object和map的区别 2.weakMap和map的区别 &#xff08;1&#xff09;Map本质上就是键值对的集合&#xff0c;但是普通的Object中的键值对中的键只能是字符串。而ES6提供的Map数据结构类似于对象&#xff0c;但是它的键不限制范围&#xff0c;可以是任意类型&#xff0c;是一…

使用bpmn-js 配置颜色

本篇文章介绍如何使用bpmn-js给图例配置颜色。该示例展示了如何向BPMN图添加颜色的多种不同方法。 通过层叠设置颜色 这种方式比较简单&#xff0c;直接通过设置图片的CSS层叠样式就可实现。 .highlight-overlay {background-color: green; /* color elements as green */opa…

【算法设计与分析】反转链表 ||

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;算法分析与设计 ⛺️稳中求进&#xff0c;晒太阳 题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表…

Attention Is All Your Need论文翻译

0.摘要 这个统治序列转换模型是基于复杂循环或者卷积神经网络&#xff0c;它包含编码器和解码器。表现最好的模型也通过注意力机制来连接编码器和解码器。我们提出了一个新的简单网络架构——Transformer,它仅仅是是基于注意力机制&#xff0c;完全免去递推和卷积。在两个机器…

代码随想录算法训练营第十七天| 110.平衡二叉树、257. 二叉树的所有路径、 404.左叶子之和 (优先掌握递归)

110.平衡二叉树 刷题https://leetcode.cn/problems/balanced-binary-tree/description/文章讲解https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html视频讲解https://www.bilibili.com/video/BV1Ug411S7my/?vd_sourceaf4853e80f89e28094a5f…