playwright-stealth 第一个案例

介绍

同步版本 sync_api(最常用)
打开浏览器,访问百度,自动输入内容,点击搜索,如果不用 stealth,会弹出人类验证框,使用后直接显示搜索结果

from playwright.sync_api import sync_playwright
# ✅ 1. 导入 2.x 版本的 Stealth 类
from playwright_stealth import Stealth 

with sync_playwright() as p:
    browser = p.chromium.launch(
        headless=False,
        args=[
            "--disable-blink-features=AutomationControlled",
            "--no-sandbox"
        ]
    )
    context = browser.new_context(
        viewport={"width": 1280, "height": 720},
        locale="zh-CN",
        timezone_id="Asia/Shanghai"
    )
    page = context.new_page()

    # ✅ 2. 使用 Stealth 类并调用同步的 apply 方法
    # 注意:这里不需要传 page 对象,它会应用到整个 context
    Stealth().apply_stealth_sync(context)

    page.wait_for_timeout(1000)

    # 访问指定网址
    page.goto("https://www.baidu.com/")

    # 设置浏览器窗口大小
    # page.set_viewport_size({"width": 1920, "height": 1080})

    # 打印网页标题和网址
    print(page.title())
    print(page.url)

    page.wait_for_timeout(2000)

    print("输入搜索关键字")

    # 使用正确的定位器定位百度搜索框
    ele_input = page.locator('//textarea[@id="chat-textarea"]')
    # 输入框输入文字
    ele_input.fill("Python教程")

    page.wait_for_timeout(1500)

    print("点击搜索")

    # css 选择器,给按钮点击
    ele_bottom = page.locator('#chat-submit-button')

    print("ele_bottom:",ele_bottom.count())

    if ele_bottom.count() > 1:
        ele_bottom.first.click()

    # 等待20秒后退出
    page.wait_for_timeout(20000)

    # ✅ 3. 规范关闭资源
    context.close()
    browser.close()

重要注意事项(避坑)

  1. 调用顺序硬性要求
    Stealth().apply_stealth_sync(context) 必须在 page.goto() 之前执行
    页面加载完成后再注入,网站检测脚本已经执行,失效!

  2. 无头模式新版 Headless=new
    Playwright 默认新版无头 headless="new" 兼容性更好;旧无头 headless=True 指纹特征更强,更容易被封。

    browser = p.chromium.launch(headless="new")
    
  3. 它不是万能的
    ✅ 能绕过:基础JS机器人检测、普通Cloudflare简易验证
    ❌ 无法解决:

    • TLS指纹(可搭配 curl_cffi)
    • 鼠标/点击行为模型检测
    • IP封禁、频率限制
    • 高级Bot防护(PerimeterX、Datadome)
  4. 搭配优化组合(实战推荐)

    # 启动参数
    args=[
     "--disable-blink-features=AutomationControlled",
     "--disable-dev-shm-usage",
     "--no-sandbox",
    ]
    # context 配置
    user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0 Safari/537.36",
    locale="zh-CN",
    timezone_id="Asia/Shanghai"
    

原文出处:/show_1GW3njKvOUpB.html