You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Playwright绕过CloudFlare浏览器完整性校验

使用Playwright绕过GitLab的Cloudflare浏览器验证方案

很多开发者已经成功用Playwright搞定这个问题,核心是让Playwright模拟真实用户的浏览器行为,避开Cloudflare的自动化检测,下面是几个可行的方案:

  • 启用反检测脚本模拟真实浏览器
    Playwright可以通过自定义初始化脚本掩盖自动化特征,同时配置真实的浏览器参数,降低被检测的概率:

    from playwright.sync_api import sync_playwright
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        # 配置真实的用户代理和视口尺寸
        context = browser.new_context(
            user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36",
            viewport={"width": 1920, "height": 1080}
        )
        # 注入脚本隐藏webdriver特征
        context.add_init_script("""
            Object.defineProperty(navigator, 'webdriver', {
                get: () => undefined
            });
        """)
        page = context.new_page()
        page.goto("https://gitlab.com/users/sign_in")
        # 等待Cloudflare验证完成,networkidle表示页面资源加载稳定
        page.wait_for_load_state("networkidle")
        # 后续执行登录操作,比如填充用户名密码
        # page.fill("#user_login", "你的用户名")
        # page.fill("#user_password", "你的密码")
        browser.close()
    
  • 添加人工验证的 fallback 逻辑
    如果自动绕过失效,可以在代码中设置无限等待,让测试人员手动完成Cloudflare验证,直到页面跳转到登录界面:

    page.goto("https://gitlab.com/users/sign_in")
    # 等待登录界面的用户名输入框出现,timeout=0表示无限等待
    page.wait_for_selector("#user_login", timeout=0)
    

    这种方式适合测试环境中偶尔触发的验证场景,一次手动验证后,后续可复用当前会话。

  • 用持久化上下文保存会话
    创建持久化的浏览器上下文,将Cookie、会话信息存储在本地目录,第一次手动完成验证后,后续启动可直接复用上下文,跳过Cloudflare验证:

    from playwright.sync_api import sync_playwright
    
    with sync_playwright() as p:
        # 持久化上下文会把浏览器数据存在指定目录
        browser = p.chromium.launch_persistent_context(
            user_data_dir="./gitlab_browser_session",
            headless=False
        )
        page = browser.new_page()
        page.goto("https://gitlab.com/users/sign_in")
        # 首次运行需手动完成验证,之后再启动将自动跳过验证步骤
        page.wait_for_selector("#user_login")
        # 执行登录流程
        browser.close()
    

内容的提问来源于stack exchange,提问作者mrGreenBrown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:30:58