百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Playwright 极速入门:1 小时搞定环境搭建与首个测试脚本

myzbx 2025-09-09 07:32 19 浏览

一、Playwright 简介与核心优势

Playwright 是微软开源的现代化 Web 自动化工具,支持 Chromium(Chrome/Edge)、Firefox、WebKit(Safari) 三大浏览器引擎,提供跨平台(Windows/macOS/Linux)和跨语言(Python/JS/Java/C#)的统一 API。

核心优势
自动等待机制:智能等待元素加载,减少因网络延迟导致的失败
录制与调试工具:内置 codegen 实时生成操作脚本
多语言支持:Python/Node.js/Java/C# 灵活选择
真移动端模拟:内置设备描述符(如 iPhone 13/Pixel 5)

二、环境搭建(10分钟搞定!)

1. 安装 Python 环境(需 3.8+)

# 检查 Python 版本
python --version
# 安装 Playwright 库
pip install playwright
# 安装浏览器驱动(自动下载 Chromium/Firefox/WebKit)
playwright install

避坑提示:国内用户可通过设置镜像加速下载:

set PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright
playwright install

2. 验证安装

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)  # 显示浏览器界面
    page = browser.new_page()
    page.goto("https://playwright.dev")
    print(page.title())  # 输出:Fast and reliable end-to-end testing
    browser.close()

运行成功即表示环境就绪

三、首个测试脚本:网页导航与截图(15分钟)

from playwright.sync_api import sync_playwright

def run():
    with sync_playwright() as p:
        # 启动 Chromium 并访问网页
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()
        page.goto("https://example.com")
        
        # 保存截图(含完整页面)
        page.screenshot(path="example.png", full_page=True)
        
        # 打印页面标题
        print("页面标题:", page.title())
        
        browser.close()

if __name__ == "__main__":
    run()

效果说明

  • 自动打开浏览器并访问 example.com
  • 生成全页截图 example.png
  • 控制台输出标题 "Example Domain"

四、进阶操作:元素定位与交互(20分钟)

1. 元素定位四大方式

# 文本定位(推荐!)
page.locator("text='登录'").click()

# CSS 选择器
page.locator("#submit-btn").click()

# XPath
page.locator("//button[@class='confirm']").click()

# 语义化定位(ARIA 角色)
page.get_by_role("button", name="提交").click()

最佳实践:优先使用 textget_by_role() 提高可读性和稳定性。

2. 模拟用户登录流程

# 输入用户名密码
page.get_by_placeholder("请输入手机号/邮箱").fill("test@example.com")
page.get_by_placeholder("请输入密码").fill("mypassword")

# 点击登录按钮
page.get_by_role("button", name="登录").click()

# 等待导航完成
page.wait_for_url("**/dashboard")

注:wait_for_url() 确保页面跳转完成再继续操作。

五、调试神器:录制工具与 Trace Viewer

1. 脚本录制(codegen)

# 启动录制器(自动生成 Python 代码)
playwright codegen https://example.com

操作浏览器界面即可实时生成代码,适合快速原型设计:
!https://example.com/codegen-demo.png

提示:录制后需优化定位器逻辑。

2. 追踪测试过程(Trace Viewer)

context = browser.new_context()
context.tracing.start(screenshots=True, snapshots=True)  # 开启记录
# ...执行操作...
context.tracing.stop(path="trace.zip")                  # 保存日志

查看日志:

npx playwright show-trace trace.zip

可回放操作视频、查看 DOM 快照及网络请求。

六、同步 vs 异步模式选择

模式

适用场景

代码示例

同步模式

简单脚本/快速调试

from playwright.sync_api import ...

异步模式

高并发/复杂任务

await page.goto(...)

异步示例

import asyncio
from playwright.async_api import async_playwright

async def main():
    async with 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())

提示:爬虫或批量操作时异步效率提升 3 倍+。

七、实战案例:爬取商品数据

async def scrape_products():
    asyncwith async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("https://shop.example.com")
        
        # 获取所有商品标题
        titles = await page.eval_on_selector_all(
            ".product-item", 
            "elements => elements.map(e => e.textContent)"
        )
        print(titles)  # 输出:['商品A', '商品B', ...]
        
        await browser.close()

关键点:eval_on_selector_all() 直接执行 JS 提取数据。

八、总结与学习路径

1 小时成果清单

  • 环境搭建与浏览器驱动安装
  • 首个导航+截图脚本
  • 元素定位与表单操作
  • 脚本录制与 Trace 调试

下一步学习
框架集成:结合 Pytest 管理测试用例
移动端测试p.devices["iPhone 13"] 模拟真机
CI/CD 流水线:GitHub Actions 自动执行测试

官方资源

https://playwright.dev/python

https://github.com/microsoft/playwright-python

掌握基础操作后,你已具备用 Playwright 实现 自动化测试、数据采集、监控任务 的能力!

相关推荐

如何设计一个优秀的电子商务产品详情页

加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

怎么在JS中使用Ajax进行异步请求?

大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

前端监控 SDK 开发分享_前端监控系统 开源

一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

Ajax 会被 fetch 取代吗?Axios 怎么办?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

前端面试题《AJAX》_前端面试ajax考点汇总

1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

Ajax 详细介绍_ajax

1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

6款可替代dreamweaver的工具_替代powerdesigner的工具

dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

福斯《死侍》发布新剧照 "小贱贱"韦德被改造前造型曝光

时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

2025 年 Python 爬虫四大前沿技术:从异步到 AI

作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

最贱超级英雄《死侍》来了!_死侍超燃

死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...