Python 中 sync_playwright 使用详解
sync_playwright 是 Playwright
提供的同步 API 接口,
它允许我们以同步的方式编写浏览器自动化脚本,而不用处理异步 async/await
语法,
非常适合快速上手和编写脚本。
1. 安装 Playwright
pip install playwright
# 安装浏览器驱动
playwright install
2. 引入 sync_playwright
from playwright.sync_api import sync_playwright
sync_playwright是 Playwright 的入口,
需要通过with上下文来启动和关闭 Playwright。
3. 基本使用
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
# 启动浏览器 (chromium / firefox / webkit)
browser = p.chromium.launch(headless=False)
page = browser.new_page()
# 打开网页
page.goto("https://example.com")
# 获取页面标题
print(page.title())
# 截图
page.screenshot(path="example.png")
# 关闭浏览器
browser.close()
4. 浏览器操作
4.1 启动浏览器
# 无头模式 (默认 True)
browser = p.chromium.launch(headless=True)
# 显示浏览器窗口
browser = p.chromium.launch(headless=False)
# 调试模式 (slow_mo 每步操作延迟 500ms)
browser = p.chromium.launch(headless=False, slow_mo=500)
# 指定用户数据目录(保存登录状态等)
browser = p.chromium.launch_persistent_context(
user_data_dir="userdata",
headless=False
)
4.2 新建页面
context = browser.new_context()
page = context.new_page()
一个 Browser 可以包含多个 Context,每个 Context 就像一个独立的浏览器实例,互不干扰。
5. 页面常用操作
5.1 打开页面
page.goto("https://www.baidu.com")
5.2 输入内容
page.fill("input[name='wd']", "Playwright Python")
5.3 点击按钮
page.click("input[type='submit']")
5.4 获取元素文本
text = page.inner_text("h1")
print(text)
5.5 获取属性
href = page.get_attribute("a", "href")
print(href)
5.6 等待元素加载
page.wait_for_selector("#result")
6. 页面截图与 PDF
# 截图
page.screenshot(path="page.png", full_page=True)
# 导出 PDF (仅支持 Chromium)
page.pdf(path="page.pdf", format="A4")
7. 执行 JavaScript
result = page.evaluate("() => document.title")
print(result)
可以传参:
result = page.evaluate("(x, y) => x + y", 5, 7)
print(result) # 12
8. 处理弹窗 (Dialog)
def handle_dialog(dialog):
print(dialog.message)
dialog.accept()
page.on("dialog", handle_dialog)
page.click("#alertButton")
9. 网络请求拦截与修改
def handle_route(route, request):
if "api" in request.url:
print("拦截到请求:", request.url)
route.abort()
else:
route.continue_()
page.route("**/*", handle_route)
page.goto("https://example.com")
10. 文件上传与下载
上传文件
page.set_input_files("input[type='file']", "example.txt")
文件下载
with page.expect_download() as download_info:
page.click("a#download")
download = download_info.value
download.save_as("downloaded_file.txt")
11. 自动等待机制
Playwright 内置智能等待,不需要频繁 sleep。
常见等待方法:
page.wait_for_selector("css")page.wait_for_timeout(2000)# 强制等待 2 秒page.wait_for_load_state("networkidle")
12. 示例:百度搜索并截图
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.baidu.com")
page.fill("input[name='wd']", "Playwright Python")
page.press("input[name='wd']", "Enter")
page.wait_for_selector("#content_left")
page.screenshot(path="baidu_result.png", full_page=True)
browser.close()
13. 总结
sync_playwright适合快速编写同步脚本,简单易用。- 提供了强大的 页面操作 API,包括元素交互、截图、PDF、下载、上传等。
- 内置 智能等待机制,大大减少手动
sleep的需要。 - 可用于 爬虫、自动化测试、逆向分析 等场景。
📌 官方文档: Playwright for Python