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

如何通过GitHub找到一个人?

如何通过GitHub找到一个人?

前言 在日常工作协作、学术交流、项目对接等诸多场景中,获取特定人员的有效联系方式往往是推进事务的关键前提。然而,在实际情况中,直接获取联系人信息的渠道时常受限。GitHub 作为全球知名的开源代码托管平台,汇聚了海量开发者资源,其平台内的版本控制相关数据蕴含着潜在的联系人信息,我们就需要一些技巧开找到一个人的联系方式 准备条件 1.具备有效的 GitHub 账号:需完成正规注册与实名认证流程,确保账号处于正常使用状态,这是调用 GitHub 相关功能及 API 的基础前提。 2.明确目标人员的 GitHub 账号信息:需准确获取目标人员的 GitHub 账号名称,且该账号下需存在已创建的仓库(Repository)。仓库是存储代码及相关提交记录的核心载体,无仓库则无法获取后续所需的关键数据。 原理 GitHub 基于 Git 版本控制系统构建,而 Git 在使用过程中,要求用户预先配置个人用户名(Username)和电子邮箱(Email)信息,如同一下一样。

By Ne0inhk

Qwen2.5-1.5B开源大模型:适配Intel Arc GPU(Arc A770)的oneAPI部署尝试

Qwen2.5-1.5B开源大模型:适配Intel Arc GPU(Arc A770)的oneAPI部署尝试 1. 为什么是Qwen2.5-1.5B?轻量、本地、可控的对话起点 你有没有试过这样的场景:想用一个AI助手写点文案,查点资料,或者帮着理清一段代码逻辑,但又不想把问题发到网上——怕隐私泄露,怕响应慢,怕要注册、要登录、要等排队。这时候,一个真正跑在自己电脑上的小而快的大模型,就不是“可选项”,而是“刚需”。 Qwen2.5-1.5B就是这样一个务实的选择。它不是参数动辄几十亿的庞然大物,而是一个只有15亿参数的精悍模型。这个体量意味着什么?它能在一块显存仅16GB的Intel Arc A770显卡上稳稳运行,推理不卡顿,响应有反馈,对话有上下文,而且全程不联网、不上传、不依赖云服务。 更关键的是,它不是阉割版。这是阿里通义实验室官方发布的Qwen2.

By Ne0inhk

MinIO开源版本部署实战指南:避开许可证陷阱的完整方案

MinIO开源版本部署实战指南:避开许可证陷阱的完整方案 【免费下载链接】miniominio/minio: 是 MinIO 的官方仓库,包括 MinIO 的源代码、文档和示例程序。MinIO 是一个分布式对象存储服务,提供高可用性、高性能和高扩展性。适合对分布式存储、对象存储和想要使用 MinIO 进行存储的开发者。 项目地址: https://gitcode.com/GitHub_Trending/mi/minio 在当今云原生技术快速发展的背景下,MinIO作为高性能对象存储解决方案,因其出色的性能和易用性而备受青睐。然而,许多技术团队在初次部署MinIO时,常常因为版本混淆而陷入许可证验证失败的困境。本文将从实战角度出发,为您提供一套完整的开源版本部署方案,帮助您轻松避开许可证陷阱,快速搭建稳定可靠的存储服务。 🔍 开源版本部署的常见误区 典型错误症状识别 当您遇到以下提示时,说明遇到了版本选择问题: * "FATAL Unable to validate license, terminating process.

By Ne0inhk
Claude Code接入Github

Claude Code接入Github

目前AI编程工具可以分为3种类别: 1. 1.本地IDE,代表产品有cursor、windsurf 2. 2.在线网站,代表产品有lovable、bolt.new 3. 3.命令行,代表产品有claude code、codex claude code这种命令行工具可以很方便地集成到各种平台中,本篇文章就是介绍如何把claude code快速接入到github中,在开发流程中嵌入AI能力。 claude code 接入github,我们不需要重复造轮子,anthropic官方提供并开源了名为claude code action(https://github.com/anthropics/claude-code-action)的工具,claude code action更新很频繁,前段时间刚发布了正式版本v1,借助它可以快速把claude code集成到github中。 接下来按照配置api key、在github安装claude、让claude code参与开发3个步骤,分享一下如何把claude code集成到github。 配置api

By Ne0inhk