news 2026/4/18 5:26:14

Python使用Playwright入门教程:从环境搭建到实战应用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python使用Playwright入门教程:从环境搭建到实战应用

在Web自动化测试与爬虫开发领域,Playwright凭借其跨浏览器兼容性、智能等待机制和强大的网络控制能力,已成为开发者首选的现代化工具。本文将系统讲解Python环境下Playwright的安装配置、核心功能及实战案例,帮助读者快速掌握这一高效工具。

一、环境搭建:三步完成开发准备

1. 系统要求

  • Python版本:3.8+(推荐3.10+以获得最佳兼容性)
  • 操作系统:Windows 10+/macOS 12+/Linux(Ubuntu 20.04+或Debian 11+)
  • 浏览器支持:Chromium、Firefox、WebKit(Safari内核)

2. 安装步骤

# 1. 安装核心库(推荐使用清华源加速)pipinstallplaywright -i https://pypi.tuna.tsinghua.edu.cn/simple# 2. 下载浏览器二进制文件(自动匹配系统环境)python -m playwrightinstall# 3. 安装pytest插件(可选,用于测试框架集成)pipinstallpytest-playwright

3. 验证安装

fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browser=p.chromium.launch(headless=False)# 有头模式便于调试page=browser.new_page()page.goto("https://playwright.dev")print(page.title())# 应输出"Playwright"browser.close()

二、核心功能详解:四大场景实战

1. 基础操作流程

fromplaywright.sync_apiimportsync_playwrightdeftest_baidu_search():withsync_playwright()asp:# 启动浏览器(无头模式示例)browser=p.chromium.launch(headless=True)context=browser.new_context()# 创建隔离环境page=context.new_page()# 执行操作page.goto("https://www.baidu.com")page.fill("input[name=wd]","Playwright教程")page.click("text=百度一下")# 验证结果assert"Playwright"inpage.title()# 资源清理context.close()browser.close()

2. 元素定位策略(重点掌握)

Playwright提供五种定位方式,按推荐优先级排序:

(1)语义化定位(最佳实践)
# 通过角色定位按钮page.get_by_role("button",name="登录").click()# 通过标签文本定位page.get_by_text("立即购买").click()# 通过placeholder定位输入框page.get_by_placeholder("请输入手机号").fill("13800138000")
(2)CSS选择器
# ID定位page.locator("#submit-btn").click()# 属性组合定位page.locator("input[type='text'][class='form-control']").fill("test")# 伪类选择(定位奇数行)page.locator("tr:nth-of-type(odd)").click()
(3)XPath定位
# 组合条件定位page.locator("//input[@type='text' and contains(@placeholder,'密码')]").fill("123456")# 轴定位(定位父元素)page.locator("//button/parent::div").click()

3. 高级功能实现

(1)网络请求拦截(API模拟)
deftest_api_mock():withsync_playwright()asp:browser=p.chromium.launch()page=browser.new_page()# 拦截特定API请求defhandle_route(route):if"api/data"inroute.request.url:route.fulfill(status=200,json={"message":"Mock数据"})else:route.continue_()page.route("**/*",handle_route)page.goto("https://example.com")assert"Mock数据"inpage.content()browser.close()
(2)移动设备模拟
deftest_mobile_view():withsync_playwright()asp:# 使用预置设备参数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()

三、最佳实践:提升测试稳定性

1. 测试组织策略

# pytest_playwright示例(conftest.py)importpytestfromplaywright.sync_apiimportsync_playwright@pytest.fixture(scope="session")defbrowser():pw=sync_playwright().start()browser=pw.chromium.launch(headless=True)yieldbrowser browser.close()pw.stop()deftest_example(browser):page=browser.new_page()page.goto("https://bing.com")assert"Bing"inpage.title()

2. 稳定性保障措施

  • 显式等待:优先使用page.wait_for_selector()替代硬性等待
  • 测试ID规范:与开发约定使用data-testid属性
    <buttondata-testid="login-submit">登录</button>
    page.get_by_test_id("login-submit").click()
  • 跨iframe处理
    frame=page.frame_locator("iframe.login-frame")frame.locator("#username").fill("admin")

3. 调试技巧

  • 录制工具:使用playwright codegen生成基础代码
    playwright codegen https://example.com
  • 可视化调试:在VS Code中安装Playwright插件,使用"Pick Locator"工具
  • 日志级别控制
    importlogging logging.basicConfig(level=logging.INFO)# 显示详细日志

四、实战案例:自动化登录流程

fromplaywright.sync_apiimportsync_playwrightimportjsonimportosclassQuarkDownloader:def__init__(self):self.storage_path="state.json"self.quark_url="https://quark.cn/share"self.username="your_username"# 需替换为实际用户名deflogin_and_save_state(self):withsync_playwright()asp:browser=p.chromium.launch(headless=False)# 显示浏览器界面page=browser.new_page()# 访问登录页page.goto(self.quark_url)# 等待扫码登录(实际项目中需替换为具体登录逻辑)page.wait_for_selector(f"span:text('{self.username}')")# 保存浏览器状态storage_state=browser.new_context().storage_state()withopen(self.storage_path,"w")asf:json.dump(storage_state,f)browser.close()defdownload_file(self,share_url,extract_code):ifnotos.path.exists(self.storage_path):self.login_and_save_state()withsync_playwright()asp:browser=p.chromium.launch(headless=True)context=browser.new_context(storage_state=self.storage_path)page=context.new_page()# 监听下载事件defhandle_download(route):if"download"inroute.request.url:route.continue_()page.route("**/*",handle_download)# 访问分享链接page.goto(share_url)page.fill("input[placeholder='提取码']",extract_code)page.click("text=提取文件")# 等待下载完成(实际项目中需根据具体下载逻辑调整)page.wait_for_timeout(10000)context.close()browser.close()# 使用示例downloader=QuarkDownloader()downloader.download_file(share_url="https://quark.cn/share/xxxxxx",# 替换为实际分享链接extract_code="1234"# 替换为实际提取码)

五、总结与展望

Playwright通过其现代化的架构设计,解决了传统自动化工具的三大痛点:

  1. 跨浏览器一致性:统一API适配Chromium/Firefox/WebKit
  2. 智能等待机制:自动处理元素加载状态
  3. 网络控制能力:支持请求拦截与修改

对于Python开发者而言,掌握Playwright不仅能提升测试效率,还能为爬虫开发提供新的解决方案。建议从语义化定位开始实践,逐步掌握网络拦截和移动模拟等高级功能,最终构建出健壮的自动化测试体系。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/6 0:29:10

mdpi等期刊的单剑号双剑号顺序问题

在 MDPI 模板中&#xff0c;\firstnote{Current address: Affiliation.} 的含义和用法如下&#xff1a; 核心含义 firstnote 指的是作者的现地址&#xff08;Current Address&#xff09;。这在学术界非常常见&#xff0c;主要用于以下场景&#xff1a; 入职/跳槽&#xff1a…

作者头像 李华
网站建设 2026/4/17 13:26:45

AI设计:用技术提升创意效率的实战指南

AI设计的本质&#xff0c;是通过机器学习与计算机视觉技术&#xff0c;将设计中的重复性劳动技能门槛环节转化为自动化流程&#xff0c;从而让创意从业者从工具操作中解放&#xff0c;聚焦于更具价值的策略性创意——这不是替代人类&#xff0c;而是放大人类创意的价值。 从技术…

作者头像 李华
网站建设 2026/3/10 21:23:23

JS逆向学习 加密站点的渗透测试!

加密站点的渗透测试 在银行、保险、证券、能源、通信等行业的IT系统中&#xff0c;使用数据加密传输、API接口保护、关键参数签名防篡改等保护手段都是比较常见。开发人员应用这些手段和技术&#xff0c;能大大增加攻击者的攻击成本。但这些手段却不能百之百防止“黑客”入侵&…

作者头像 李华
网站建设 2026/4/10 1:36:05

导师推荐10个AI论文网站,助你轻松搞定本科毕业论文!

导师推荐10个AI论文网站&#xff0c;助你轻松搞定本科毕业论文&#xff01; AI 工具如何助力论文写作&#xff1f; 在当今学术环境中&#xff0c;越来越多的本科生开始借助 AI 工具来提升论文写作效率。尤其是在面对繁重的写作任务时&#xff0c;这些工具不仅能够帮助学生快速生…

作者头像 李华
网站建设 2026/3/14 1:12:54

智慧校园平台系统高效管理五个最佳实践

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

作者头像 李华