做网站建设销售辛苦吗百度推广投诉电话客服24小时
文章目录
- 1. 安装 Playwright
- 1.1 安装 Playwright 库
- 1.2 安装浏览器
- 2. 基础用法
- 2.1 启动浏览器
- 2.2 查找元素
- 2.3 操作元素
- 3. 高级功能
- 3.1 等待机制
- 3.2 处理弹窗
- 3.3 执行 JavaScript
- 3.4 切换 iframe
- 3.5 处理 Cookies
- 3.6 截图和 PDF
- 3.7 模拟设备
- 3.8 网络拦截
- 4. 常见应用场景
- 4.1 自动化登录
- 4.2 抓取动态加载数据
- 4.3 模拟下拉菜单选择
- 5. 异步支持
- 6. 测试框架集成
- 7. 调试技巧
- 7.1 慢动作模式
- 7.2 调试日志
- 8. 总结
Playwright 是一个现代化的浏览器自动化工具,支持 Chromium、Firefox 和 WebKit 浏览器。它提供了强大的 API,适用于网页自动化测试、数据抓取和网页交互。Playwright 支持多语言(如 Python、JavaScript、Java、C# 等),并且具有跨浏览器、跨平台的特性。
官网:https://playwright.dev/python/docs/intro
github:https://github.com/microsoft/playwright
本文将详细介绍 Playwright 的安装、基础用法和高级功能。
1. 安装 Playwright
1.1 安装 Playwright 库
使用 pip 安装 Playwright:pip install playwright
1.2 安装浏览器
安装 Playwright 后,需要下载支持的浏览器:playwright install
2. 基础用法
2.1 启动浏览器
Playwright 支持多种浏览器,包括 Chromium、Firefox 和 WebKit。以下是一个简单的示例,启动浏览器并打开网页:
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:# 启动浏览器browser = p.chromium.launch(headless=False) # headless=False 表示显示浏览器窗口# 打开新页面page = browser.new_page()# 访问网页page.goto('https://www.example.com')# 截图page.screenshot(path='example.png')# 关闭浏览器browser.close()
2.2 查找元素
Playwright 提供了多种查找元素的方法:
page.query_selector()
:查找单个元素。page.query_selector_all()
:查找所有匹配的元素。page.locator()
:通过选择器定位元素。
示例:
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto('https://www.example.com')# 通过选择器查找元素element = page.query_selector('h1')text = element.inner_text()print(text) # 输出元素的文本内容browser.close()
2.3 操作元素
输入文本
# 输入文本:page.fill(selector, text)
page.fill('#input-id', 'Hello, Playwright')
点击元素
# 点击元素:page.click(selector)
page.click('#submit-button')
获取元素属性
value = page.get_attribute('#element-id', 'value')
获取元素文本
# 获取元素文本:page.text_content(selector)
text = page.inner_text('#element-id')
3. 高级功能
3.1 等待机制
Playwright 提供了多种等待机制,用于处理页面加载或元素加载的延迟。
等待元素出现
# 等待元素出现:page.wait_for_selector(selector)
page.wait_for_selector('#element-id', timeout=5000) # 等待最多 5 秒
等待导航完成
page.goto('https://www.example.com', wait_until='networkidle') # 等待网络空闲
自定义等待
page.wait_for_timeout(2000) # 等待 2 秒
3.2 处理弹窗
Playwright 可以处理浏览器的弹窗(如警告框、确认框、提示框)。
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()# 监听弹窗事件page.on('dialog', lambda dialog: dialog.accept()) # 点击确定page.goto('https://example.com')page.click('button') # 点击按钮触发弹窗browser.close()
3.3 执行 JavaScript
可以通过 page.evaluate() 方法执行 JavaScript 代码。
# 滚动页面到底部
page.evaluate('window.scrollTo(0, document.body.scrollHeight);')# 修改元素属性
page.evaluate('document.getElementById("element-id").style.backgroundColor = "yellow";')
3.4 切换 iframe
如果需要操作 iframe 中的元素,需要先切换到 iframe。
frame = page.frame(name='iframe-name')
element = frame.query_selector('#element-in-iframe')
3.5 处理 Cookies
Playwright 可以操作浏览器的 Cookies。
# 设置 Cookie
page.context.add_cookies([{'name': 'key', 'value': 'value', 'url': 'https://www.example.com'}])# 获取 Cookie
cookies = page.context.cookies()
print(cookies)# 删除 Cookie
page.context.clear_cookies()
3.6 截图和 PDF
截图
page.screenshot(path='screenshot.png', full_page=True) # 截取整个页面
生成 PDF
page.pdf(path='page.pdf', format='A4')
示例:
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()page.goto('https://example.com')# 截取页面截图page.screenshot(path='example.png')# 生成 PDF 文件page.pdf(path='example.pdf')browser.close()
3.7 模拟设备
Playwright 可以模拟不同的设备(如 iPhone、iPad 等)来测试响应式设计。
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)iPhone = p.devices['iPhone 11']context = browser.new_context(**iPhone)page = context.new_page()page.goto('https://example.com')browser.close()
3.8 网络拦截
Playwright 允许你拦截和修改网络请求。
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch()page = browser.new_page()# 拦截所有请求def handle_request(route, request):print(request.url)route.continue_() # 继续请求page.route('**/*', handle_request)page.goto('https://example.com')browser.close()
4. 常见应用场景
4.1 自动化登录
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto('https://www.example.com/login')# 输入用户名和密码page.fill('#username', 'your-username')page.fill('#password', 'your-password')# 点击登录按钮page.click('#login-button')browser.close()
4.2 抓取动态加载数据
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto('https://www.example.com/dynamic-content')# 等待动态内容加载page.wait_for_selector('.dynamic-content')# 获取内容content = page.inner_text('.dynamic-content')print(content)browser.close()
4.3 模拟下拉菜单选择
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto('https://www.example.com/form')# 选择下拉菜单选项page.select_option('#dropdown', 'value1')browser.close()
5. 异步支持
Playwright 支持异步操作,适合需要高效处理多个任务的场景。
import asyncio
from playwright.async_api import async_playwrightasync def main():async with async_playwright() as p:browser = await p.chromium.launch(headless=False)page = await browser.new_page()await page.goto('https://www.example.com')await page.screenshot(path='example.png')await browser.close()asyncio.run(main())
6. 测试框架集成
Playwright 可以与流行的测试框架(如 pytest)集成,用于编写端到端测试。
首先,安装 pytest 和 Playwright 的 pytest 插件:pip install pytest playwright pytest-playwright
然后,编写测试用例:
from playwright.sync_api import Pagedef test_example(page: Page):page.goto('https://example.com')assert page.title() == 'Example Domain'
7. 调试技巧
7.1 慢动作模式
在操作过程中加入延迟,方便观察页面变化。
from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page()page.goto('https://example.com')# 启用慢动作模式page.click('a[href="/about"]', delay=1000) # 点击时延迟 1 秒browser.close()
7.2 调试日志
启用调试日志,查看 Playwright 的内部操作。
DEBUG=pw:api python script.py
8. 总结
Playwright 是一个功能强大的浏览器自动化工具,适用于网页自动化测试、数据抓取和网页交互。通过掌握其基础用法和高级功能,你可以轻松实现各种浏览器自动化任务。Playwright 支持多浏览器、多语言,并且具有高效的异步操作能力,是现代浏览器自动化的首选工具之一。