【PlayWright教程(三)】基础操作汇总

自动化测试工具playwright中文文档-------7.开始使用 这意味着在Windows平台上,如果你使用的是Python 3.7或更低版本,并且希望使用Playwright,那么你可能需要确保你的代码或Playwright的某些部分能够正确设置事件循环为ProactorEventLoop,以便能够支持异步子进程。不过,请注意,从Python 3.8开始,这通常是自动处理的,因此不需要额外设置。如果这不可行,你可能需要考虑在打包之前手动下载浏览器并将其放置在 Playwright 能够找到的位置,但这通常不是推荐的做法,因为它增加了打包的复杂性和可执行文件的大小。 阅读详情

(后续再补充)

页面基本操作

Navigations | Playwright 中文文档 | Playwright 中文网

按照官网文档,调用 page.goto(url) 后页面加载过程:

  1. 设定 url
  2. 通过网络加载解析页面
  3. 触发 page.on("domcontentloaded") 事件
  4. 执行页面的 js 脚本,加载静态资源
  5. 触发 page.on("laod") 事件
  6. 页面执行动态加载的脚本
  7. 当 500ms 都没有新的网络请求的时候,触发 networkidle 事件

page.goto(url) 会跳转到一个新的链接。默认情况下 Playwright 会等待到 load 状态。如果我们不关心加载的 CSS 图片等信息,可以改为等待到 domcontentloaded 状态,如果页面是 ajax 加载,那么我们需要等待到 networkidle 状态。如果 networkidle 也不合适的话,可以采用 page.wait_for_selector 等待某个元素出现。不过对于 click 等操作会自动等待。

page.goto(url, referer="", timeout=30, wait_until="domcontentloaded|load|networkidle")

// Navigate and wait until network is idle
await page.goto('https://example.com', { waitUntil: 'networkidle' });

Playwright 会自动等待元素处于可操作的稳定状态。当然也可以用 page.wait_for_* 函数来手工等待:

page.wait_for_event("event", event_predict, timeout)
page.wait_for_function(js_function)
page.wait_for_load_state(state="domcontentloaded|load|networkidle", timeout)
page.wait_for_selector(selector, timeout)
page.wait_for_timeout(timeout)  # 不推荐使用

对页面的操作方法主要有:

# selector 指的是 CSS 等表达式
page.click(selector)
page.fill(selector, value)  # 在 input 中填充值

# 例子
page.click("#search")

获取页面中的数据的主要方法有:

page.url  # url
page.title()  # title
page.content()  # 获取页面全文
page.inner_text(selector)  # element.inner_text()
page.inner_html(selector)
page.text_content(selector)
page.get_attribute(selector, attr)

# eval_on_selector 用于获取 DOM 中的值
page.eval_on_selector(selector, js_expression)
# 比如:
search_value = page.eval_on_selector("#search", "el => el.value")

# evaluate 用于获取页面中 JS 中的数据,比如说可以读取 window 中的值
result = page.evaluate("([x, y]) => Promise.resolve(x * y)", [7, 8])
print(result) # prints "56"

选择器表达式

在上面的代码中,我们使用了 CSS 表达式(比如#button)来选取元素。实际上,Playwright 还支持 XPath 和自己定义的两种简单表达式,并且是自动识别的。

# 通过文本选择元素,这是 Playwright 自定义的一种表达式
page.click("text=login")

# 直接通过 id 选择
page.click("id=login")

# 通过 CSS 选择元素
page.click("#search")
# 除了常用的 CSS 表达式外,Playwright 还支持了几个新的伪类
# :has 表示包含某个元素的元素
page.click("article:has(div.prome)")
# :is 用来对自身做断言
page.click("button:is(:text('sign in'), :text('log in'))")
# :text 表示包含某个文本的元素
page.click("button:text('Sign in')")  # 包含
page.click("button:text-is('Sign is')")  # 严格匹配
page.click("button:text-matches('\w+')")  # 正则
# 还可以根据方位匹配
page.click("button:right-of(#search)")  # 右边
page.click("button:left-of(#search)")  # 左边
page.click("button:above(#search)")  # 上边
page.click("button:below(#search)")  # 下边
page.click("button:near(#search)")  # 50px 之内的元素

# 通过 XPath 选择
page.click("//button[@id='search'])")
# 所有 // 或者 .. 开头的表达式都会默认为 XPath 表达式

对于 CSS 表达式,还可以添加前缀css=来显式指定,比如说 css=.login 就相当于 .login.

除了上面介绍的四种表达式以外,Playwright 还支持使用 >> 组合表达式,也就是混合使用四种表达式。

page.click('css=nav >> text=Login')

复用 Cookies 等认证信息

在 Puppeteer 中,复用 Cookies 也是一个老大难问题了。这个是 Playwright 特别方便的一点,他可以直接导出 Cookies 和 LocalStorage, 然后在新的 Context 中使用。

# 保存状态
import json
storage = context.storage_state()
with open("state.json", "w") as f:
    f.write(json.dumps(storage))

# 加载状态
with open("state.json") as f:
    storage_state = json.loads(f.read())
context = browser.new_context(storage_state=storage_state)

监听事件

通过 page.on(event, fn) 可以来注册对应事件的处理函数:

def log_request(intercepted_request):
    print("a request was made:", intercepted_request.url)
page.on("request", log_request)
# sometime later...
page.remove_listener("request", log_request)

其中比较重要的就是 request 和 response 两个事件

拦截更改网络请求

可以通过 page.on("request") 和 page.on("response") 来监听请求和响应事件。

from playwright.sync_api import sync_playwright as playwright

def run(pw):
    browser = pw.webkit.launch()
    page = browser.new_page()
    # Subscribe to "request" and "response" events.
    page.on("request", lambda request: print(">>", request.method, request.url))
    page.on("response", lambda response: print("<<", response.status, response.url))
    page.goto("https://example.com")
    browser.close()

with playwright() as pw:
    run(pw)

其中 request 和 response 的属性和方法,可以查阅文档:https://playwright.dev/python/docs/api/class-request

通过 context.route, 还可以伪造修改拦截请求等。比如说,拦截所有的图片请求以减少带宽占用:

context = browser.new_context()
page = context.new_page()
# route 的参数默认是通配符,也可以传递编译好的正则表达式对象
context.route("**/*.{png,jpg,jpeg}", lambda route: route.abort())
context.route(re.compile(r"(\.png$)|(\.jpg$)"), lambda route: route.abort())
page.goto("https://example.com")
browser.close()

其中 route 对象的相关属性和方法,可以查阅文档:https://playwright.dev/python/docs/api/class-route

灵活设置代理

Playwright 还可以很方便地设置代理。Puppeteer 在打开浏览器之后就无法在更改代理了,对于爬虫类应用非常不友好,而 Playwright 可以通过 Context 设置代理,这样就非常轻量,不用为了切换代理而重启浏览器。

context = browser.new_context(
    proxy={"server": "http://example.com:3128", "bypass": ".example.com", "username": "", "password": ""}
)

杀手级功能:录制操作直接生成代码

Playwright 的命令行还内置了一个有趣的功能:可以通过录制你的点击操作,直接生成 Python 代码。

python -m playwright codegen http://example.com/

Playwright 还有很多命令行功能,比如生成截图等等,可以通过 python -m playwright -h 查看。

其他

除此之外,Playwright 还支持处理页面弹出的窗口,模拟键盘,模拟鼠标拖动(用于滑动验证码),下载文件等等各种功能,请查看官方文档吧,这里不赘述了。对于写爬虫来说,Playwright 的几个特性可以说是秒杀 Puppeteer/Pyppeteer:

  1. 官方同步版本的 API
  2. 方便导入导出 Cookies
  3. 轻量级设置和切换代理
  4. 支持丰富的选择表达式

参考:

Playwright: 比 Puppeteer 更好用的浏览器自动化工具 - 知乎

Playwright Python教程:基础篇 本教程面向从未接触过 Playwright 或刚刚起步的自动化测试开发者。我们将从最核心的概念讲起,确保你能牢固地打下基础。1. 是什么? Playwright 是一个用于 Web 测试和自动化的开源库。它提供了一个高级 API 来控制 Chromium、Firefox 和 WebKit 浏览器,让你能够以编程方式模拟用户操作,如点击、输入、导航等,从而进行自动化测试或网页抓取。2. 为什么选择它?(对比 Selenium)理解这三个核心概念是学好 Playwright 的关键。它们的关系就像浏览器 -> 阅读详情

相关推荐

Playwright教程

在Chromium,Firefox和WebKit上进行测试。Playwright拥有适用于所有现代浏览器的完整API覆盖,包括Google Chrome和Microsoft Edge(带有Chromium),Apple Safari(带有WebKit)和Mozilla Firefox。跨平台的WebKit测试。使用Playwright,使用适用于Windows,Linux和macOS的WebKit构建,测试您的应用程序在Apple Safari中的行为。在本地和CI上进行测试。测试手机。

松勤软件测试 分享不同阶段的测试经验资料 1398

playwright教程 (一)适合小白

playwright工具结合xlwt,将所需数据生成excel表格,博主也是小白,第一次写博文,适合小白观看。

weixin_45674080的博客 1万+

Python Playwright 教程

4. JavaScript 交互:Playwright 支持 JavaScript 交互,可以在页面中运行 JavaScript 代码。Python Playwright 是一个用于自动化浏览器操作的库,它可以帮助我们模拟用户行为,进行网页内容的自动化操作。通过本教程的学习,您将掌握 Playwright 的基本用法和高级用法,能够进行网页爬取、表单提交、页面元素提取等操作。1. 网页爬取:可以使用 Playwright 的 Page 对象进行网页爬取,提取所需数据。

2401_82631917的博客 1531

Playwright js/ts 中文文档

Playwright 中文文档 自己在学playwright的时候找资料比较匮乏,就结合词典翻译了入门介绍部分的文档 网址:https://www.yuque.com/docs/share/5471da47-135d-4f09-b039-3b4d82f7bb74?# 《PlayWright 中文文档》

YumOS的博客 1万+

【PlayWright教程(一)】安装和使用(python)

当今常用的三个常用的浏览器驱动: 库 Selenium Puppeteer Playwright JavaScript 支持 官方支持 官方支持 官方支持 Python 异步支持 无 第三方,而且 bug 不少 官方支持 Python 同步支持 官方支持 无 官方支持 维护者 社区 Google 微软 可操作性浏览器 Chrome/Firefox/Safari/Edge Chrome/

Code_LT的博客 2万+

Python+Playwright自动化测试-playwright操作iframe(三)

iframe 是web自动化里面一个比较头疼的测试场景,在Selenium中处理 iframe 需要切换来切换去非常麻烦。但是在playwright中,让其变得非常简单,我们在使用中无需切换iframe,直接定位元素即可。

weixin_42242910的博客 1552

playwright基础教程

1、使用 Playwright 的录制功能来自动生成测试脚本。Playwright 提供了一个录制工具,可以在浏览器中执行一些操作并自动生成测试脚本,这样可以大大减少编写测试脚本的时间和工作量。具体使用方法可以参考 Playwright 官方文档。2、使用 Playwright 内置的截图功能来捕捉测试过程中的截图。Playwright 提供了内置的截图功能,可以捕捉测试过程中的任何时刻的屏幕截图,方便后续的问题分析和排查。具体使用方法可以参考 Playwright 官方文档。

伤心的辣条 4984

【playwright】学习--持续汇总

使用playwright实现UI自动化测试

u011537504的博客 1260

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

定位器在执行操作之前立即解析为元素,因此实际上可以在不同的 DOM 元素上对同一定位器执行一系列操作。has_text: 匹配包含指定文本的元素,这些元素可能包含在子元素或后代元素中。has_not_text: 匹配不包含指定文本的元素,这些元素可能包含子元素或后代元素。对于里面的一些定位方式,输入,点击等操作,在这一节,我们直接进行一个大汇总。has_not:匹配不包含与内部定位器匹配的元素的元素。name:str,匹配辅助名称的选项。exact,bool,是否找到完全匹配项:区分大小写和全字符串。

qq_46158060的博客 1168

python+playwright 学习-73 page.wait_for_selector()等待元素到达指定状态

前言 网页上的元素有不同状态,有些元素本来不在DOM里,点击某个按钮后才出现。 有些元素是本来就已经在DOM里是隐藏的状态,点某个按钮后才变成显示状态。 如果我们想让元素到达指定的状态再下一步操作,可以用page.wait_for_selector() 方法。 page.wait_for_selector() 方法 wait_for_selector() 方法部分源码 def wait_for_...

qq_27371025的博客 1860

Python + Playwright(4): 等待元素至指定状态

当我们在进行UI自动化测试的时候,保证测试的稳定性至关重要。网页中的元素可能处于不同的状态,有些可能在页面加载完成之前不在DOM中,需要某些操作后才会出现,而其他元素可能一直存在于DOM中,但最初处于隐藏状态,需要通过操作才能使其可见。如果在执行脚本时没有考虑到元素的状态,很可能导致脚本执行失败。为了保证自动化测试的稳定性,我们需要确保在执行操作之前,所需的元素已经达到了指定状态。

blues_C的博客 7957

【python自动化】Playwright基础教程(八)鼠标操作

打开在线画图:https://draw.yunser.com/,根据官网的示列画一个正方形。【python自动化】Playwright基础教程(八)鼠标操作。按下鼠标左键松开时,页面会显示粉红色的左键。playwright模拟鼠标操作,每个。长按鼠标左键时,页面会显示红色的左键。selenium中长按是有单独的方法。对象都有自己的鼠标事件,可以通过。dblclick模拟鼠标双击。未按鼠标时,不会显示其他颜色。click模拟鼠标点击。wheel模拟鼠标滚动。down模拟鼠标按下。move模拟鼠标移动。

qq_46158060的博客 2702

喷雾破碎模型解析:从理论到CFD应用实践

本文深入解析喷雾破碎模型的理论基础与CFD应用实践,重点介绍KHRT、TAB和ETAB等主流模型的核心原理与工程调参技巧。通过OpenFOAM实例演示和参数优化建议,帮助工程师精准预测液滴破碎行为,提升燃烧效率与排放控制性能,适用于汽车发动机、燃气轮机等工业场景。

weixin_29281915的博客 499

PlayWright教程

微软开源自动化测试工具Playwright,支持主流浏览器,包括:Chrome、Firefox、Safari 等,同时支持以无头模式、有头模式运行,并提供了同步、异步的 API,可以结合主流测试框架使用,并且支持浏览器端的自动化脚本录制等功能。跨浏览器:Playwright 支持所有现代渲染引擎,包括Chromium、WebKit 和 Firefox;跨平台:在 Windows、Linux 和 MacOS 上进行本地或 CI、无头或有头测试;

Anthony路人甲的博客 8282

EWM与SAP ERP的数据集成

1、EWM与 SAPERP的无缝集成-基础数据&业务交易数据 2、SAP ERP设置:连接SAP ERP和EWM必须设置应用程序连接支持-ALE(Application Link Enabling) 3、ERP - EWM仓库数据集成: SAP ERP需要设置配置信息,连接ERP和EWM之间的库存管理应用,基于工厂+库存地点对应一个仓库号来进行配置; 在ERP中需要创建一个中间虚拟仓库,代表ERP仓库;“中间虚拟”仓库创建之后,工厂+库存地点的信息...

weixin_43899798的博客 3797

Android 开发实战:从零到一集成 espeak-ng 实现中文离线 TTS(无需账号开箱即用)

本文详细介绍了如何在 Android 项目中集成 espeak-ng,实现中文离线语音播报。通过下载 so 库、编写 Java 接口、封装管理类,开发者可快速构建无需账号的 TTS 功能。文章覆盖从零到一的开发步骤、调试技巧及性能优化,适合中高级 Android 开发者参考。

全栈 3319

Playwright基础使用教程(附完整代码拆解)

本文为Playwright新手教程,详细讲解其安装与使用方法。Playwright是一款微软开发的Web自动化工具,相比Selenium具有无需配置驱动、跨浏览器支持、稳定性高、API简洁等优势。安装只需两步:通过pip安装Playwright库,再运行playwright install自动下载浏览器驱动。教程包含完整代码示例,逐行解析如何打开浏览器、访问网页、操作元素等核心功能,并附调试技巧。通过本教程,新手可快速掌握Playwright基础使用,实现网页自动化操作。(149字)

2603_95532426的博客 1万+

智能安防摄像头埋点实践:用户行为与设备状态的闭环监控(含AI事件)

智能安防摄像头埋点闭环体系设计及应用实践 摘要: 本文系统阐述了智能安防摄像头埋点闭环体系的设计与实践。首先分析了传统埋点的不足及闭环埋点的价值,提出由用户行为埋点、设备状态埋点和AI事件埋点构成的三维埋点体系框架。详细介绍了闭环监控的四大流程:数据采集、汇聚清洗、分析建模和智能决策。通过误报优化、个性化策略等案例展示了AI事件闭环的实际应用价值,并探讨了隐私合规、性能优化等关键挑战的解决思路。最后展望了端侧AI增强、预测型埋点等未来发展趋势。该体系实现了从数据采集到业务决策的完整闭环,有效提升了AI模型性

专注智能硬件软硬件产品经理成长与实战,分享从需求定义到量产落地的真实日记。涵盖IoT趋势洞察、研发协作经验、产品方法论与工具箱,用轻松有趣的“汪式”视角,陪伴产品经理成长、避坑与升级。 1046

Playwright 教程

摘要:Playwright 是 Microsoft 开发的现代化 Web 自动化测试和爬虫框架,支持 Chromium、Firefox 和 WebKit 三大浏览器,提供跨语言统一 API。2025 年最新版本具备自动等待、可靠事件、代码生成等特性,比 Selenium 更稳定高效。安装简单,支持 Python 和 Node.js,提供录制功能快速生成脚本。核心功能包括智能定位、断言、网络拦截和测试报告。推荐学习官方文档、菜鸟教程和中文社区资源,进阶可探索 Playwright Test 框架和 AI 驱动

m0_57545130的博客 1616

LWIP协议栈在STM32H7上的内存优化实战:如何用32KB RAM实现稳定千兆以太网通信

本文深入探讨了在STM32H7微控制器上,如何通过内存优化策略,在仅32KB的D2 SRAM中稳定运行LWIP协议栈以实现千兆以太网通信。文章详细分析了STM32H7的内存架构、LWIP的内存消耗瓶颈,并提供了从描述符表与PBUF池精确分配、链接脚本修改到MPU区域划分的一整套实战优化方案,旨在解决大数据量传输卡死等常见配置问题。

gg901的博客 604

在Proteus中用80C51模拟4线SPI点亮OLED屏幕

在Proteus里用80C51模拟4线SPI控制OLED屏幕使其显示图案(汇编实现)。

Connor3093的博客 5003

【python自动化】Playwright基础教程(二)

目前已经将公司selenium框架构建的web ui自动化项目使用playwright进行了重构,个人对playwright的使用也比之前更加熟悉,在此重新汇总一下,后续如果应用了本文中没有提及的知识,会继续更新这个系列。点击小窗口的Record按钮,可以进入录屏模式,进入录屏模式后你看看到浏览器的元素定位等功能,如下图所示。首先,我使用的是同步模式,入门学习不建议直接学异步模式,不要有这么多好奇心,先入门再说。,代码运行到此处,你会发现浏览器旁边会弹出如下界面,这时候你就可以进行录制操作,点击。

qq_46158060的博客 975

爬虫面试:关于爬虫破解验证码的13个经典面试题

​解释:验证码是一种用于区分人类用户和自动化程序(如爬虫)的技术,通常通过显示图形、文字或音频等方式,要求用户完成特定任务(如识别扭曲的字母、点击特定区域等)。​作用:防止恶意爬虫滥用网站资源、进行批量注册、登录破解等行为,保护网站的安全性和数据的完整性。

数据知道的博客 1万+

PlayWright -元素节点操作

操作顺序是:悬停拖动元素,鼠标向下,悬停放置元素,第二次悬停放置元素,鼠标向上。由此可见,click() 方法优化了selenium 点击元素的遇到的一些痛点问题,比如元素遮挡,不在当前屏幕,元素未出现在DOM中或隐藏不可见等不可点击的状态。playwright 在操作元素的时候,都会自动去让元素出现在可视窗口。在延迟加载的页面中,使用locator.wait_for()等待元素可见是很有用的。hover 方法是把鼠标放到元素上,它也会自动去页面上找到元素,让它出现在可视窗口。playwright 的。

qq_44744569的博客 1937

运行codex时出现登录失败:failed to start login server: 以一种访问权限不允许的方式做了一个访问套接字的尝试。 (os error 10013) 解决方案

的本质是Windows 系统端口保留策略而非代码 bug。推荐使用方案一(调整动态端口范围),一劳永逸解决。如果你安装了 Docker Desktop 或启用了 WSL2,调整端口范围后记得检查相关服务是否正常运行。

一键难忘的博客 4158

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 【PlayWright教程(二)】核心概念
下一篇: 【PlayWright教程(四)】使用避坑(python)
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值