Python Playwright库详解:从入门到实战

一、项目简介

Playwright是由微软开发的现代化浏览器自动化库,支持通过统一API控制Chromium、Firefox、WebKit三大浏览器引擎。其核心特性包括:

  • 跨浏览器兼容性:一套代码适配所有主流浏览器
  • 自动等待机制:智能等待元素就绪,告别随机失败
  • 强大网络控制:支持请求拦截、模拟和修改
  • 移动设备模拟:内置50+种设备参数,轻松适配移动端
  • 同步/异步双模式:兼顾易用性与执行效率

二、安装部署

2.1 环境要求

  • Python 3.7+
  • Windows/MacOS/Linux系统
  • 推荐使用Pytest作为测试框架

2.2 快速安装

# 安装核心库 pip install playwright # 下载浏览器二进制文件(自动识别系统环境) python -m playwright install# 安装Pytest插件(可选) pip install pytest-playwright 

2.3 验证安装

from playwright.sync_api import sync_playwright with sync_playwright()as p: browser = p.chromium.launch() page = browser.new_page() page.goto("https://playwright.dev")print(page.title())# 应输出 "Playwright" browser.close()

三、核心功能详解

3.1 基础操作流程

from playwright.sync_api import sync_playwright with sync_playwright()as p:# 启动浏览器(有头模式便于调试) browser = p.chromium.launch(headless=False)# 创建新上下文(隔离环境) context = browser.new_context()# 打开页面 page = context.new_page()# 基础操作示例 page.goto("https://baidu.com") page.fill("input[name=wd]","Playwright教程") page.click("text=百度一下")# 截图保存 page.screenshot(path="search_result.png")# 关闭资源 context.close() browser.close()

3.2 元素定位策略

# 文本选择器(推荐) page.click("text=立即购买")# CSS选择器 page.fill(".search-box","关键词")# XPath选择器 page.click('//button[@id="submit"]')# 响应式选择器(自动适配移动端) page.locator("button:visible").click()

3.3 高级功能实现

3.3.1 网络请求拦截
deftest_api_mock():with sync_playwright()as p: browser = p.chromium.launch() page = browser.new_page()# 启用请求拦截 page.route("**/api/data",lambda route: route.fulfill( status=200, json={"message":"Custom Response"})) page.goto("https://example.com")assert page.locator(".data-display").text_content()=="Custom Response" browser.close()
3.3.2 移动设备模拟
deftest_mobile_view():with sync_playwright()as p: iphone = p.devices['iPhone 12'] browser = p.chromium.launch()# 创建移动设备上下文 context = browser.new_context(**iphone, locale='zh-CN', timezone_id='Asia/Shanghai') page = context.new_page() page.goto("https://m.taobao.com") page.screenshot(path="mobile_view.png") context.close() browser.close()
3.3.3 异步执行模式
import asyncio from playwright.async_api import async_playwright asyncdefmain():asyncwith async_playwright()as p: browser =await p.chromium.launch() page =await browser.new_page()await page.goto("https://example.com")await browser.close() asyncio.run(main())

四、最佳实践

4.1 测试组织策略

# pytest_playwright示例import pytest @pytest.fixture(scope="function")defbrowser(): pw = sync_playwright().start() browser = pw.chromium.launch()yield browser browser.close()deftest_search(browser): page = browser.new_page() page.goto("https://bing.com") page.fill("input[name=q]","Playwright最佳实践") page.click("text=搜索")assert"Playwright最佳实践"in page.content()

4.2 调试技巧

# 日志记录配置import logging logging.basicConfig( level=logging.DEBUG,format='%(asctime)s - %(levelname)s - %(message)s')# 截图辅助调试try: page.click("#submit")except Exception as e: page.screenshot(path="error_debug.png")raise e 

4.3 性能优化

# 并行执行配置(pytest.ini)[pytest] addopts =-n auto # 资源复用deftest_parallel():with sync_playwright()as p: contexts =[]for _ inrange(10): contexts.append(p.chromium.launch().new_context())# 并行执行测试...

五、常见问题解决

Q1: 安装时提示"Permission denied"
A: 使用以下命令修复权限:

sudochown -R $USER ~/.cache/playwright 

Q2: 元素定位失败
A: 尝试以下方法:

# 增加等待时间 page.wait_for_selector(".target-element")# 使用更鲁棒的选择器 page.locator("text=立即购买 >> nth=0").click()

Q3: 如何处理登录认证
A: 使用存储状态功能:

context = browser.new_context( storage_state="auth_state.json")# 或手动输入凭证 page.fill("#username","admin") page.fill("#password","123456") page.click("#login")

六、总结

Playwright通过其现代化的设计和丰富的功能集,已成为Web自动化领域的首选工具。其核心优势体现在:

  • 跨浏览器一致性:统一API适配所有主流浏览器
  • 开发效率:自动等待和智能定位减少80%的调试时间
  • 测试可靠性:内置网络模拟和移动适配能力
  • 生态完善:与Pytest等框架无缝集成

建议开发者从基础操作入手,逐步掌握网络拦截、设备模拟等高级功能,结合项目需求构建完整的自动化测试体系。

七、附录

  • 官方文档:https://playwright.dev/python
  • 设备参数表:https://playwright.dev/python/api/class-devices
  • GitHub仓库:https://github.com/microsoft/playwright-python
  • 交流社区:https://gitter.im/microsoft/playwright

Read more

【AI】——SpringAI通过Ollama本地部署的Deepseek模型实现一个对话机器人(二)

【AI】——SpringAI通过Ollama本地部署的Deepseek模型实现一个对话机器人(二)

🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL,Javaweb,Rust,python】 🎈热门专栏:🎊【Springboot,Redis,Springsecurity,Docker,AI】  感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️ 目录 🎈Java调用Deepseek  🍕下载Deepseek模型  🍕本地测试  🍕Java调用模型 🎈构建数据库  🍕增强检索RAG  🍕向量数据库  🍕Springboot集成pgvector 🎈chatpdf 🎈function call调用自定义函数 🎈多模态能力 🎈Java调用Deepseek 本地没有安装Ollama、Docker,openwebUI,可以先学习一下这篇文章:【AI】——结合Ollama、Open WebUI和Docker本地部署可视化AI大语言模型_ollma+本地大模型+open web ui-ZEEKLOG博客

By Ne0inhk
本地部署中文OpenClaw 飞书机器人部署指南

本地部署中文OpenClaw 飞书机器人部署指南

适用场景:在 Windows 本地(PowerShell)一键部署 OpenClaw,使用阿里云百炼作为大模型后端,通过飞书长连接模式实现 AI 机器人。 安装skills工具参考:OpenClaw 最新必安装 10 个 Skills-ZEEKLOG博客 自动化发布小红书:OpenClaw 实现小红书自动化发文:操作指南 步骤 1:安装 OpenClaw(openclaw中文社区) 1. 打开 PowerShell。 2. 执行以下命令一键安装: # 在 PowerShell 中运行 iwr -useb https://clawd.org.cn/install.ps1 | iex * 安装过程会自动下载 Node.js、依赖等,耗时几分钟。 * 安装完成后会自动进入配置向导,或提示你继续下一步。

By Ne0inhk
Flink从入门到上天系列第六篇:Flink运行时架构

Flink从入门到上天系列第六篇:Flink运行时架构

一:系统架构 1:会话模式 作业管理器(JobManager)         JobManager是一个Flink集群中任务管理和调度的核心,是控制应用执行的主进程。也就是说,每个应用都应该被唯一的JobManager所控制执行。         JobManger又包含3个不同的组件。 JobMaster         JobMaster是JobManager中最核心的组件,负责处理单独的作业(Job)。所以JobMaster和具体的Job是一一对应的,多个Job可以同时运行在一个Flink集群中, 每个Job都有一个自己的JobMaster。需要注意在早期版本的Flink中,没有JobMaster的概念;而JobManager的概念范围较小,实际指的就是现在所说的JobMaster。                  在作业提交时,JobMaster会先接收到要执行的应用。JobMaster会把JobGraph转换成一个物理层面的数据流图,这个图被叫作“执行图”(ExecutionGraph),它包含了所有可以并发执行的任务。JobMaster会向资源管理器(

By Ne0inhk
PostgreSQL:语言基础与数据库操作

PostgreSQL:语言基础与数据库操作

🧑 博主简介:ZEEKLOG博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。 技术合作请加本人wx(注明来自ZEEKLOG):foreast_sea PostgreSQL:语言基础与数据库操作 引言 在当今数据驱动的数字世界中,数据库技术如同现代城市的交通网络,承载着海量数据的流动与存储。作为企业级开源数据库的标杆,PostgreSQL凭借其强大的扩展性、严格的ACID特性和丰富的功能集,已经成为支撑现代应用的基石。根据2023年DB-Engines排名统计,PostgreSQL连续五年蝉联"年度数据库"

By Ne0inhk