使用Playwright Chromium与Python登录Gmail时遇“此浏览器可能不安全”错误
解决Playwright登录Gmail被拦截的问题
问题根源
你遇到的是Google的反自动化检测拦截,原因包括:
- Playwright默认的浏览器指纹会被识别为自动化工具
- 代码中批量循环登录的操作直接触发了Google风控
- 部分浏览器启动参数反而暴露了自动化行为
修复方案
1. 优化浏览器配置,模拟真实用户环境
调整浏览器启动参数和上下文配置,隐藏自动化标识,使用真实用户环境:
from playwright.sync_api import Playwright, sync_playwright with sync_playwright() as playwright: # 仅保留必要的参数,移除触发检测的特殊配置 browser = playwright.chromium.launch( headless=False, args=[ '--disable-blink-features=AutomationControlled', # 核心:隐藏自动化控制标识 '--no-sandbox', '--disable-dev-shm-usage' ] ) # 创建上下文时添加真实User-Agent,启用状态存储复用 context = browser.new_context( user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', storage_state='gmail_login_state.json' # 保存登录状态,后续可直接复用 ) page = context.new_page() page.goto('https://mail.google.com') # 单个账号测试(禁止批量循环) account = "你的Gmail账号" password = "你的Gmail密码" # 处理邮箱输入 if page.locator('input[type="email"]').is_visible(): page.fill('input[type="email"]', account) page.click('button:has-text("下一步")') page.wait_for_timeout(1000) # 模拟用户操作间隔 # 处理密码输入 if page.locator('input[type="password"]').is_visible(): page.fill('input[type="password"]', password) page.click('button:has-text("下一步")') page.wait_for_timeout(2000) # 保存登录状态,下次启动可跳过登录流程 context.storage_state(path='gmail_login_state.json') # 验证登录结果 if page.locator('div[role="main"]').is_visible(): print("登录成功") browser.close()
2. 移除批量登录逻辑
代码中循环100次尝试不同账号的操作是典型的自动化批量行为,Google风控系统会直接拦截。先测试单个账号登录,确认正常后再考虑其他操作,且操作间隔需模拟真实用户节奏(比如每次操作间隔30秒以上)。
3. 处理验证步骤
如果遇到验证码或两步验证,首次登录时需手动完成验证,之后通过storage_state保存的状态可直接跳过验证流程。若需长期自动化,建议为账号开启两步验证后使用应用专用密码登录。
4. 关键参数说明
--disable-blink-features=AutomationControlled:隐藏浏览器的自动化标识,避免被Google检测storage_state:保存登录后的Cookie和本地存储,后续启动可直接进入已登录状态- 真实
User-Agent:让浏览器环境更贴近普通用户
内容的提问来源于stack exchange,提问作者Anik Saha
相关产品推荐
相关产品推荐

