新一代浏览器自动化神器Playwright深度解析:从入门到实战的指南
off999 2025-05-25 14:48 18 浏览 0 评论
一、Playwright简介:为什么选择它?
Playwright是由微软推出的新一代浏览器自动化框架,专为Web测试与数据抓取设计。其核心优势在于:
- 跨浏览器支持:统一API兼容Chromium、Firefox、WebKit(含Edge、Safari),无需切换驱动。
- 自动化等待机制:内置智能等待,减少手动定位延时,提升脚本稳定性。
- 无头/有头模式无缝切换:兼顾调试与性能需求。
- 低门槛安装:自动下载浏览器与驱动,告别环境配置烦恼。
对比传统工具(Selenium vs Playwright):
特性 | Selenium | Playwright |
浏览器支持 | 需手动安装对应驱动 | 内置主流浏览器驱动 |
等待机制 | 依赖显式等待,易导致卡顿 | 自动等待元素加载,默认30秒超时 |
API设计 | 接口分散,学习成本高 | 统一简洁,支持链式调用 |
网络拦截 | 需第三方库配合 | 原生支持请求/响应拦截 |
并行测试 | 需复杂配置 | 天生支持多进程并行执行 |
二、安装与配置
- 环境要求
Python 3.7+(推荐使用虚拟环境管理)
安装Playwright:
pip install playwright
- 驱动安装(自动下载Chromium、Firefox、WebKit)
python -m playwright install
- 提速技巧:使用国内镜像源(如清华源):
playwright install --driver-binary-mirror=https://mirrors.tuna.tsinghua.edu.cn/playwright
三、基础使用:同步 vs 异步模式
3.1 同步模式(适合新手)
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://www.example.com")
page.click("text=Login")
page.fill("#username", "testuser")
page.screenshot(path="login.png")
browser.close()
3.2 异步模式(性能优化)
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 page.evaluate("document.title = 'Test Page'")
title = await page.title()
print(title) # 输出:Test Page
await browser.close()
asyncio.run(main())
核心方法对比:
- sync_playwright() vs async_playwright():上下文管理器,管理浏览器生命周期。
- page.goto(url):导航至指定URL,自动等待页面加载完成。
- page.click(selector):通过选择器定位元素并点击(支持CSS、XPath、文本匹配)。
- page.fill("#input", "text"):输入文本到指定输入框。
四、高级功能实战
4.1 元素定位与操作
Playwright提供三种定位方式:
- CSS选择器:
page.click("#submit-btn") # 按ID定位
page.click("[data-testid=login]") # 按自定义属性定位
- XPath:
page.click("xpath=//button[contains(text(), 'Login')]")
- 文本匹配(模糊/正则):
page.click("text=Log in") # 精确匹配文本
page.click("text=/Log\s*in/i") # 正则匹配
实战示例:自动登录表单
def login(page):
page.fill("#username", "admin")
page.fill("#password", "123456")
page.click("text=Login")
# 断言登录成功
expect(page).to_have_title("Dashboard")
4.2 事件监听与自动化测试
- 页面事件拦截:
def on_console_message(msg):
print(f"Console log: {msg.text}")
page.on("console", on_console_message)
- 网络请求监控:
def intercept_response(response):
if "api/login" in response.url:
print(response.json()) # 打印登录接口返回数据
page.route("**/api/*", intercept_response)
4.3 网络Mock与数据拦截
- Mock接口响应:
def mock_handler(route):
route.fulfill(body={"success": True}, status=200)
page.route("https://example.com/api/data", mock_handler)
- 上传/下载文件:
# 上传文件
with page.expect_file_chooser() as chooser:
page.click("text=Upload")
chooser.value.set_files("path/to/file.pdf")
# 下载文件
with page.expect_download() as download:
page.click("text=Download")
download.value.save_as("output.pdf")
五、实战案例:豆瓣电影爬虫
目标:爬取豆瓣电影Top250榜单信息(名称、评分、简介)。
步骤:
- 启动Playwright,打开豆瓣页面。
- 定位电影列表,解析元素内容。
- 处理分页,循环抓取。
- 数据存储(CSV/JSON)。
from playwright.sync_api import sync_playwright
def crawl_douban_top250():
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://movie.douban.com/top250")
movies = []
for page_num in range(1, 11): # 共10页
movie_items = page.query_selector_all(
"//div[@class='item']"
)
for item in movie_items:
title = item.query_selector("div.title a").text_content()
rating = item.query_selector("span.rating_num").text_content()
movies.append({
"title": title,
"rating": rating
})
# 翻页
page.click("text=后页")
return movies
# 保存为CSV
import csv
with open("douban_movies.csv", "w", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["title", "rating"])
writer.writeheader()
writer.writerows(crawl_douban_top250())
六、性能优化与调试技巧
- 无头模式加速:
browser = p.chromium.launch(headless=True)
- 延迟模拟:
page.locator("text=Submit").click(slow_mo=500) # 慢动作调试
- 日志记录:
playwright.log.setLevel("DEBUG")
- 代码生成工具:
playwright codegen --target python -o script.py https://example.com
实时记录操作并生成对应代码,快速生成原型脚本。
七、总结与展望
Playwright凭借其低门槛安装、智能等待、多浏览器支持等特性,已成为自动化测试与数据抓取的理想选择。
未来,其WebAssembly支持(跨平台)与移动端测试能力(如Appium集成)值得期待。
对于需要高稳定性、跨场景兼容的开发者,Playwright无疑是替代Selenium的优选方案。
参考资料:
- Playwright官方文档:https://playwright.dev/python
- 性能对比报告:https://playwright.dev/docs/benchmarks
- 代码生成工具使用指南:https://playwright.dev/docs/codegen
感谢点赞关注收藏:)
相关推荐
- 黑客工具sqlmap,带你了解什么师sql注入
-
1、sqlmap介绍sqlmap是一款支持MySQL,Oracle,PostgreSQL,MicrosoftSQLServer,MicrosoftAccess,IBMDB2,SQL...
- Python SQLAlchemy_python SQLAlchemy 返回添加的数据
-
1简介SQLAlchemy是一个使用Python实现的ORM框架,它的设计理念是:SQL数据库的量级和性能比对象集合重要,对象集合的抽象比表和行重要;它采用了类似于Java里Hib...
- 如何“破解”Oracle数据库性能测试过程中索引使用问题?
-
近日在执行Oracle数据库性能测试时,通过在使用JMeter发压前后分别生成数据库快照,进而生成AWR报告分析,发现某一SQL语句的执行时间较长,遂对此语句进行分析。 通过AWR报告中Main...
- 用Java写Python解释器?这个黑科技让跨语言开发爽到飞起!
-
你是不是也遇到过这种尴尬:想用Java调用Python写的数据处理脚本,但接口调试半天还老报错?或者想在Python里用Java的高性能加密库,结果被序列化搞得头大?今天要给你安利的GraalVMT...
- Oracle高级数据库特性揭秘:存储过程、触发器与权限管理
-
当谈论Oracle高级数据库特性时,存储过程和函数、触发器、权限管理和安全性以及数据库连接和远程访问是关键概念。下面我将为每个主题提供详细的解释,并附上高质量示例。存储过程和函数:存储过程和函数是预...
- oracle和mysql的优缺点对比_mysql与oracle的优势
-
oracle的优缺点优点:开放性:oracle能所有主流平台上运行(包括windows)完全支持所有工业标准采用完全开放策略使客户选择适合解决方案对开发商全力支持;可伸缩性,并行性:Oracle...
- Python 中的 pyodbc 库_python中的库有哪些
-
《Python中的pyodbc库:强大的数据库操作工具》一、pyodbc库简介pyodbc是一个用于访问各种关系型数据库的Python库。它支持多种数据库系统,包括Microso...
- 一文掌握怎么利用Shell+Python实现多数据源的异地备份程序
-
简介:在信息化时代,数据安全和业务连续性已成为企业和个人用户关注的焦点。无论是网站数据、数据库、日志文件,还是用户上传的文档、图片等,数据一旦丢失,损失难以估量。尤其是当数据分布在多个不同的目录、服务...
- pip的使用及配置_pip怎么配置
-
要使用python必须要学会使用pip,pip的全称:packageinstallerforpython,也就是Python包管理工具,主要是对python的第三方库进行安装、更新、卸载等操作,...
- Anaconda下安装pytorch_anaconda下安装tensorflow
-
之前的文章介绍了tensorflow-gpu的安装方法,也介绍了许多基本的工具与使用方法,具体可以看Ubuntu快速安装tensorflow2.4的gpu版本。pytorch也是一个十分流行的机器学...
- Centos 7 64位安装 python3的教程
-
wgethttps://www.python.org/ftp/python/3.10.13/Python-3.10.13.tgz#下载指定版本软件安装包tar-xzfPython-3.10.1...
- 如何安装 pip 管理工具_pip安装详细步骤
-
如何安装pip管理工具方法一:yum方式安装Centos安装python3和python3-devel开发包>#yuminstallgcclibffi-develpy...
- Python入门——从开发环境搭建到hello world
-
一、Python解释器安装1、在windows下步骤1、下载安装包https://www.python.org/downloads/打开后选择【Downloads】->【Windows】小编是一...
- 生产环境中使用的十大 Python 设计模式
-
在软件开发的浩瀚世界中,设计模式如同指引方向的灯塔,为我们构建稳定、高效且易于维护的系统提供了经过验证的解决方案。对于Python开发者而言,理解和掌握这些模式,更是提升代码质量、加速开发进程的关...
- 如何创建和管理Python虚拟环境_python怎么创建虚拟环境
-
在Python开发中,虚拟环境是隔离项目依赖的关键工具。下面介绍创建和管理Python虚拟环境的主流方法。一、内置工具:venv(Python3.3+推荐)venv是Python标准...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 黑客工具sqlmap,带你了解什么师sql注入
- Python SQLAlchemy_python SQLAlchemy 返回添加的数据
- 如何“破解”Oracle数据库性能测试过程中索引使用问题?
- 用Java写Python解释器?这个黑科技让跨语言开发爽到飞起!
- Oracle高级数据库特性揭秘:存储过程、触发器与权限管理
- oracle和mysql的优缺点对比_mysql与oracle的优势
- Python 中的 pyodbc 库_python中的库有哪些
- 一文掌握怎么利用Shell+Python实现多数据源的异地备份程序
- pip的使用及配置_pip怎么配置
- Anaconda下安装pytorch_anaconda下安装tensorflow
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)