如何使用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
相关产品推荐
相关产品推荐

