Playwright 常用操作

前置安装

pip install playwright
playwright install chromium

## 推荐最稳版本
优先选用:
    - Python 3.9 兼容性最好,踩坑最少
    - Python 3.10、3.11 完全没问题(目前最主流)
    - Python3.12、3.13 新版也支持,少数第三方库可能有兼容问题

一、基础浏览器生命周期

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    # 启动浏览器;headless=False 可视化窗口,new‑headless新版无头
    browser = p.chromium.launch(headless=False)
    
    # 独立浏览器环境(cookie、缓存、账号互相隔离,适合多账号)
    context = browser.new_context(viewport={"width":1920,"height":1080})
    
    # 新建标签页
    page = context.new_page()

    # 跳转网页
    page.goto("https://www.baidu.com")

    # 关闭
    browser.close()

二、页面跳转、刷新、前进后退

page.goto("https://www.baidu.com")
page.reload()          # 刷新
page.go_back()         # 后退
page.go_forward()      # 前进
page.set_default_timeout(8000) # 全局元素等待超时,默认5000ms

三、八种常用元素定位

# 1.id
page.get_by_id("kw")
# 2.文本
page.get_by_text("百度一下")
# 3.按钮文字
page.get_by_role("button",name="百度一下")
# 4.输入框placeholder
page.get_by_placeholder("请输入搜索词")
# 5.类名
page.locator(".s‑btn")
# 6.css选择器
page.locator("div#head")
# 7.xpath
page.locator("//input[@id='kw']")
# 8.自定义属性
page.get_by_test_id("search")

四、元素操作

# 点击
page.get_by_id("su").click()
# 双击
page.locator("#box").dblclick()
# 右键
page.locator("#box").click(button="right")

# 输入(一次性填入)
page.get_by_id("kw").fill("python")
# 模拟真人逐字输入带延迟
page.get_by_id("kw").type("hello")

# 获取文本
text = page.get_by_id("title").text_content()
# 获取属性值
src = page.locator("img").get_attribute("src")
# 判断是否可见
page.get_by_id("kw").is_visible()
# 勾选复选框
page.locator("#agree").check()
# 下拉选择
page.locator("#select").select_option("1")

五、等待(Playwright 最强特性:自动等待)

click/fill/locator 会自动等待元素加载、可见、可点击,不需要 time.sleep

# 强制等待(尽量少用)
page.wait_for_timeout(2000)

# 等待元素出现
page.wait_for_selector("#result")
# 等待url
page.wait_for_url("**/search")
# 等待页面加载完毕
page.wait_for_load_state("networkidle")

六、截图、录屏、导出 PDF

# 可视区域截图
page.screenshot(path="screen.png")
# 整页长截图
page.screenshot(path="full.png",full_page=True)
# 单个元素截图
page.locator("div").screenshot(path="elem.png")

# 录屏:创建上下文开启录像
context = browser.new_context(record_video_dir="./video")
# 关闭上下文自动生成视频

# 导出PDF(仅chromium无头模式)
context = browser.new_context()
page = context.new_page()
page.goto("https://www.baidu.com")
page.pdf(path="baidu.pdf")

七、网络拦截、抓包、修改请求

# 监听所有接口请求
page.on("request",lambda req:print(req.url,req.method))
# 监听响应
page.on("response",lambda res:print(res.url,res.status))

# 拦截并屏蔽图片、css加速网页
page.route("**/*.jpg",lambda route:route.abort())
# 替换接口返回数据
page.route("**/api/data",lambda r:r.fulfill(body='{"code":0}'))

八、Cookie、本地存储

# 获取全部cookie
cookies = context.cookies()
# 设置cookie
context.add_cookie({"name":"token","value":"xxx","url":"https://xxx.com"})

# js读取localStorage
token = page.evaluate("localStorage.getItem('token')")

九、鼠标、键盘操作

# 鼠标移动、拖拽
page.mouse.move(200,300)
page.mouse.down()
page.mouse.up()

# 键盘按键
page.keyboard.press("Enter")
page.keyboard.press("Control+a")
page.keyboard.type("text")

# 滚动页面
page.evaluate("window.scrollTo(0,800)")

十、上传 & 下载文件

# 上传文件
page.get_by_type("file").set_input_files("D:/test.jpg")

# 监听下载
with page.expect_download() as download_info:
    page.get_by_text("下载文件").click()
download = download_info.value
download.save_as("./down.zip")

十一、反自动化‑浏览器指纹伪装

from playwright_stealth import stealth_sync

context = browser.new_context(user_agent="你的真实浏览器UA")
page = context.new_page()
stealth_sync(page) # 清除webdriver指纹

启动参数关闭自动化标记
browser = p.chromium.launch(
    args=["--disable-blink-features=AutomationControlled"],
    ignore_default_args=["--enable-automation"]
)

十二、代理 IP 设置

context = browser.new_context(
    proxy={"server":"http://127.0.0.1:7890"}
)

十三、手机移动端模拟

from playwright.sync_api import devices
iphone = devices["iPhone 15"]
context = browser.new_context(**iphone)

十四、JS 执行

# 在浏览器页面运行js
result = page.evaluate("""
()=>{
    return document.title
}
""")
print(result)

十五、代码录制(懒人神器)

终端直接执行,手动操作浏览器自动生成 python 代码

playwright codegen https://www.baidu.com

十六、多标签页管理

# 监听新建弹窗
with page.expect_popup() as popup_info:
    page.get_by_text("打开新页面").click()
new_page = popup_info.value
new_page.goto("https://xxx")

十七、持久化浏览器(保存登录状态、Cookie)

# 浏览器数据存到文件夹,下次打开保留登录记录
context = p.chromium.launch_persistent_context("./browser_data",headless=False)

十八、playwright chromium.launch () 常用参数大全

browser = p.chromium.launch(
    # -------------------- 核心模式 --------------------
    headless=False,               # False=有窗口;True=无头模式;"new"新版无头
    slow_mo=500,                  # 每个操作延迟毫秒,调试非常好用
    timeout=30000,                # 启动浏览器超时时间
    
    # -------------------- 浏览器渠道(选择浏览器) --------------------
    channel="chrome",             # 使用你本机安装Chrome,不使用内置chromium
                                  # 可选:chrome, msedge, chromium-beta, chrome-dev
    
    # -------------------- 窗口控制 --------------------
    args=[
        "--start-maximized",                 # 窗口最大化
        "--window‑size=1920,1080",           # 指定窗口大小
        "--no‑sandbox",                       # linux服务器必须加!无沙箱
        "--disable‑setuid‑sandbox",
        "--disable‑blink‑features=AutomationControlled", # 隐藏自动化特征,防检测
        "--user‑agent=Mozilla/5.0 ...",      # 自定义UA
    ],
    
    # -------------------- 用户数据 / 缓存(保留登录态) --------------------
    user_data_dir="./chrome_profile",        # 浏览器用户文件夹,保存cookie、登录记录
    
    # -------------------- 反爬虫、防检测 --------------------
    ignore_default_args=["--enable‑automation"],  # 删除自动化标记参数
    
    # -------------------- 代理设置 --------------------
    proxy={
        "server": "http://127.0.0.1:7890",
        # "username":"xxx",
        # "password":"xxx"
    },
    
    # -------------------- 其他常用 --------------------
    executable_path=None,          # 手动指定浏览器exe路径
    downloads_path="./download",   # 文件下载保存目录
    handle_sighup=True,
)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。

文章标题:Playwright 常用操作

本文作者:伟生

发布时间:2026-08-16, 22:01:00

最后更新:2026-08-16, 22:24:37

原始链接:http://yoursite.com/2026/08/16/ceshi_19_playwright_02/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏