Playwright快速入门:从安装到实战元素定位

张开发
2026/4/13 15:58:40 15 分钟阅读

分享文章

Playwright快速入门:从安装到实战元素定位
1. 环境准备安装Playwright的正确姿势第一次接触Playwright时我像大多数新手一样被它跨浏览器、跨语言的特性吸引。这个由微软开源的自动化测试工具确实比传统方案简单不少。不过安装环节就有几个坑需要注意——比如我最初用pip安装后直接运行脚本结果发现浏览器二进制文件都没下载。正确的安装姿势应该是两步走# 第一步安装Python库建议指定版本 pip install playwright1.33.0 # 第二步下载浏览器内核 playwright install这里有个实用技巧如果你在国内网络环境可能会遇到下载速度慢的问题。我通常会在晚上执行安装命令或者使用清华镜像源加速pip install playwright -i https://pypi.tuna.tsinghua.edu.cn/simple安装完成后建议验证下是否成功。我习惯用这个快速检查命令python -m playwright --version注意Playwright默认会下载Chromium、Firefox和WebKit三大内核总共约300MB空间。如果只需要特定浏览器可以用playwright install chromium这样的命令单独安装。2. 第一个自动化脚本从零到百度搜索很多教程一上来就讲复杂概念我觉得不如先看个完整示例。下面这个脚本实现了打开百度并搜索关键词的功能包含了最核心的API用法from playwright.sync_api import sync_playwright with sync_playwright() as playwright: # 启动Chromium浏览器我用chrome频道更稳定 browser playwright.chromium.launch( headlessFalse, channelchrome ) # 创建上下文相当于隐身会话 context browser.new_context() page context.new_page() # 访问百度 page.goto(https://www.baidu.com) # 定位搜索框并输入文本 search_box page.locator(input[namewd]) search_box.fill(Playwright教程) # 定位搜索按钮并点击 search_btn page.locator(input[typesubmit]) search_btn.click() # 等待结果加载 page.wait_for_selector(#content_left, timeout5000) # 关闭浏览器 context.close() browser.close()这个例子中有几个关键点值得注意sync_playwright()上下文管理器确保资源正确释放new_context()比直接创建page更灵活后续可以管理cookieslocator()是元素定位的核心方法支持CSS和XPath两种语法3. 元素定位实战XPath的进阶技巧定位页面元素是自动化测试的核心技能。虽然CSS选择器更简洁但在处理复杂DOM结构时XPath才是真正的瑞士军刀。分享几个我在项目中总结的实用技巧3.1 智能定位策略绝对路径 vs 相对路径# 脆弱的绝对路径任何DOM变化都会导致失败 page.locator(xpath/html/body/div[1]/div[2]/form/span[1]/input) # 健壮的相对路径 page.locator(xpath//input[namewd])多条件组合# 同时满足class和placeholder属性 search_box page.locator(xpath//input[classs_ipt and placeholder请输入关键词]) # 包含特定文本的按钮 submit_btn page.locator(xpath//button[contains(text(),提交)])3.2 动态元素处理现代网页大量使用动态加载我常用这些方法应对# 等待元素出现最多等5秒 element page.locator(xpath//div[iddynamic-content]) element.wait_for(timeout5000) # 处理动态生成的class page.locator(xpath//div[starts-with(class, loading-)]) # 模糊匹配文本 page.locator(xpath//a[contains(text(), 下一页)])4. 性能优化与调试技巧4.1 加速页面加载默认情况下Playwright会加载所有资源但测试时其实不需要# 拦截图片请求 def block_images(route): if route.request.resource_type image: route.abort() else: route.continue_() page.route(**/*, block_images)4.2 调试神器Playwright Inspector遇到定位问题时可以启动调试模式PWDEBUG1 python your_script.py这会自动打开Inspector工具你可以实时查看执行步骤生成定位表达式单步调试脚本实用技巧在脚本中加入page.pause()会进入调试模式特别适合复杂场景的排查。5. 企业级实战经验分享在电商爬虫项目中我总结出这些最佳实践登录态保持# 保存cookies context browser.new_context(storage_stateauth.json) # 后续可以直接加载 context browser.new_context(storage_stateauth.json)并行处理优化# 多页面并行每个标签页独立context async with asyncio.TaskGroup() as tg: for url in urls: tg.create_task(process_page(url))智能等待策略组合# 先等框架加载完成 page.wait_for_selector(xpath//div[idapp]) # 再等数据请求完成 page.wait_for_response(**/api/data) # 最后等具体元素渲染 page.wait_for_selector(xpath//ul[classlist]/li[1])这些技巧都是我在真实项目中踩坑后总结的特别是等待策略那部分曾经因为顺序不对导致脚本稳定性很差。后来发现遵循框架→数据→元素的等待层次成功率能提升80%以上。

更多文章