介绍
同步版本 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()
重要注意事项(避坑)
调用顺序硬性要求
Stealth().apply_stealth_sync(context)必须在 page.goto() 之前执行
页面加载完成后再注入,网站检测脚本已经执行,失效!无头模式新版 Headless=new
Playwright 默认新版无头headless="new"兼容性更好;旧无头headless=True指纹特征更强,更容易被封。browser = p.chromium.launch(headless="new")它不是万能的
✅ 能绕过:基础JS机器人检测、普通Cloudflare简易验证
❌ 无法解决:- TLS指纹(可搭配
curl_cffi) - 鼠标/点击行为模型检测
- IP封禁、频率限制
- 高级Bot防护(PerimeterX、Datadome)
- TLS指纹(可搭配
搭配优化组合(实战推荐)
# 启动参数 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"