playwright--简单使用
playwright的基本使用主要围绕着启动浏览器、导航至网页、操作页面元素、执行脚本和收集数据这几个核心步骤。以下是简单的使用流程,以同步API为例:
目录
1. 导入库并启动playwright
2. 创建新页面并导航
3. 操作页面元素
4. 异步操作与等待
5. 数据收集
6. 截图与视频录制
7. 清理与关闭
注意事项
1. 导入库并启动playwright
首先,我们需要从playwright.sync_api导入所需模块,并使用上下文管理器启动playwright。
from playwright.sync_api import sync_playwright
def usage_1():with sync_playwright() as p:# 启动Chromium浏览器实例browser = p.chromium.launch(headless=False)
headless参数是playwright一大特性:支持无头模式(headless mode),在没有用户界面的情况下运行测试,提高效率;同时也支持有头模式,便于调试和可视化测试过程。
我们需要有用户界面的话设置headless=False,不需要用户界面就设置headless=True
2. 创建新页面并导航
接下来,创建一个新的页面实例,并导航至指定URL。
page = browser.new_page()page.goto("https://www.baidu.com")
3. 操作页面元素
可以通过CSS选择器、XPath或其它属性选择页面元素,然后进行点击、填写表单等操作。
# 在搜索框中输入关键词page.fill("#kw", "python之playwright")# 点击“百度一下”按钮进行搜索page.click("#su")
4. 异步操作与等待
对于异步加载的内容,playwright提供了强大的等待机制,确保元素或条件满足后再执行下一步
# 等待搜索结果出现,这里以第一个结果项作为等待条件page.wait_for_selector(".c-container")
page.wait_for_*系列方法是playwright官方自带的方法,和我们熟悉的sleep功能相似,但是playwright中有异步、协程的方法,直接用sleep可能会阻碍其运行,所以我们使用playwright官方自带的方法。
5. 数据收集
我们可以从页面中提取数据,比如获取文本内容、属性值等。
# 获取第一个搜索结果的标题first_result_title = page.inner_text(".c-container .t")print(f"第一个搜索结果的标题是: {first_result_title}")
6. 截图与视频录制
Playwright还支持截图和录制页面操作的视频,这对于调试非常有用。
# 保存当前页面为截图page.screenshot(path="baidu_search_result.png")
7. 清理与关闭
最后,记得清理资源,关闭浏览器实例。
browser.close()
注意事项
- 根据实际需要选择同步(sync_api)或异步(async_api)模式。
- 使用page.wait_for_*系列方法来处理异步加载的页面元素,避免脚本因元素尚未加载完成而出错。
- 适当利用page.context.storage_state(path='state.json')保存和恢复浏览器状态,以便复用登录信息等。
- 考虑到资源管理,使用with语句确保浏览器资源被适时释放。
希望通过上述内容,可以帮助大家开始使用Playwright进行网页自动化操作
相关文章:
playwright--简单使用
playwright的基本使用主要围绕着启动浏览器、导航至网页、操作页面元素、执行脚本和收集数据这几个核心步骤。以下是简单的使用流程,以同步API为例: 目录 1. 导入库并启动playwright 2. 创建新页面并导航 3. 操作页面元素 4. 异步操作与等待 5. 数…...
pom学习笔记:kimi的自动化操作
1.先看结构: 声明:我是初学,可能有不合理的地方。 2.Base层。 我是把原来一个kimi的自动问答的代码改过来。 分析:其实我是新手,因为我用的浏览器是固定的,也没有打算和别人用。所以浏览器层面年的全部写…...
【iOS】UI学习——界面切换
界面切换 push和poppresent和dismiss示例程序 push和pop 在 Objective-C 中,pop 和 push 通常是与 UINavigationController 一起使用的方法,用于控制导航栈中视图控制器的跳转和回退。 push 和 pop 通常成对使用,用于实现导航栈的前进和后退功能。当用户进入新的视图控制器时…...
【悬架笔记三】1/4被动悬架垂向动力学仿真+频域特性分析
1/4被动悬架 代码: %书第156页、159页 clc clear close all %% 一.悬架参数 ms320; mw50; Ks22000; Cs1500; Kw195000; f00.07; %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 二.垂向振动动力学仿真 %% 二.1.状态方程 A [0 1 0 -1;.…...
【C++】——继承(详解)
一 继承的定义和概念 1.1 继承的定义 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类,被继承的称为基类…...
openGauss学习笔记-299 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQLdiag慢SQL发现
文章目录 openGauss学习笔记-299 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQLdiag慢SQL发现299.1 概述299.2 使用指导299.2.1 前提条件299.2.2 SQL流水采集方法299.2.3 操作步骤299.2.4 使用方法示例299.3 获取帮助299.4 命令参考299.5 常见问题处理openGauss学…...
Git 分支管理规范化[Git Flow ]分支管理策略
分支命名规范 master 分支:master 分支只有一个,名称即为 master。GitHub 现在叫 main develop 分支:develop 分支只有一个,名称即为 developfeature 分支:feature/<功能名>,例如:featu…...
一键Mock工具(Http协议接口调试工具)
点击下载《一键Mock工具(Http协议接口调试工具》 1. 前言 在进行Web开发时,前端小伙伴通常是和后端开发人员同步进行项目开发,经常会遇到后端开发人员接口还没开发完,也没有可以调试的环境,只能按照接口文档进行“脑…...
Golang的context
目录 context的基本使用 为什么需要context Context interface 标准 error emptyCtx cancelCtx Deadline 方法 Done 方法 Err 方法 Value 方法 context.WithCancel() newCancelCtx WithCancel中propagateCancel cancel timerCtx valueCtx context的基本使用…...
Android 各个版本名称和特性总结(持续更新)
我们就从Android 5.0开始吧,因为从写文时起,大部分手机都到5.0了。 目录 Android5.0 (Lollipop 棒棒糖)新特性 Android6.0新特性 Android7.0新特性 Android8.0(O)新特性 Android9.0新特性 Android10.0(Q)新特性 Android11…...
9.0 Android中的网络技术
Android中网络相关的技术,主要分别两种,一种为直接显示网页,另外一种为获取服务器中的数据进行设置。 权限声明 访问网络是需要声明权限 <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"…...
linux查看端口是否被占用 / 包含某个字符的文件/当前正在运行的进程/根据端口号查找进程
查看端口是否被占用 netstat -tuln | grep 80查看包含某个字符的文件 grep -rl "aaa" .r :递归搜索子目录。l :只显示包含匹配字符串的文件名。 ack "your_string"查看当前正在运行的进程 ps aux或者使用 top 命令用于实时显示当…...
解锁 JavaScript ES6:函数与对象的高级扩展功能
个人主页:学习前端的小z 个人专栏:JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! ES5、ES6介绍 文章目录 💯ES6函数扩展🍓1 默认参数ἵ…...
算法金 | 10 大必知的自动化机器学习库(Python)
本文来源公众号“算法金”,仅用于学术分享,侵权删,干货满满。 原文链接:10 大必知的自动化机器学习库(Python) 一、入门级自动化机器学习库 1.1 Auto-Sklearn 简介: Auto-Sklearn 是一个自动…...
微信小游戏开发难度大吗?开发流程有哪些?
微信小游戏的开发难度因项目的复杂度和规模而定,一般来说,休闲益智类的小游戏的开发周期相对较短,大约在10个工作日到1个月。如果涉及到复杂的算法、高级的交互或特殊的效果,开发时间可能会相应延长。 微信小游戏的开发流程包括需…...
Qt程序打包成单个exe文件
文章目录 0. 准备工作1. 使用 windeployqt 提取必要的动态链接库和资源文件1.1 操作步骤1.2 补充 2. 使用 Enigma Virtual Box将文件夹打包成单个exe2.1 操作步骤 0. 准备工作 Qt程序打包用到的工具有: windeployqt :安装Qt时自带Enigma Virtual Box 下…...
【机器学习】GANs网络在图像和视频技术中的应用前景
📝个人主页:哈__ 期待您的关注 目录 1. 🔥引言 背景介绍 研究意义 2. 🎈GANs的基本概念和工作原理 生成对抗网络简介 工作原理 3. 🤖GANs在图像生成中的应用 图像超分辨率 工作原理 图像去噪 工作原理 图…...
MFC 使用sapi文字转换为语音
文章目录 添加头文件声明变量 添加头文件 声明变量 pSpVoice NULL; //默认构造函数中初始化为空 bool CChKBarSCCodeApp::InitSpVoice() {HRESULT hr ::CoInitialize(NULL); // COM初始化if (!SUCCEEDED(hr)){AfxMessageBox(_T("声音环境初始化失败!…...
(Git)多人协作1
文章目录 前言总结 前言 目标:master分支下file.txt文件新增“aaa”,“bbb” 实现:开发者1新增“aaa”,开发者2新增“bbb” 条件:在同一个分支下协作完成 实际开发过程中,每个用户都与属于自己的码云账户,如果想要进…...
MySQL-分组函数
041-分组函数 重点:所有的分组函数都是自动忽略NULL的 分组函数的执行原则:先分组,然后对每一组数据执行分组函数。如果没有分组语句group by的话,整张表的数据自成一组。 分组函数包括五个: max:最大值mi…...
深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
