Cookie复用实战:从百度网盘到12306,手把手教你绕过复杂验证码做自动化测试
Cookie复用技术在复杂验证场景下的自动化测试实战1. 验证码机制与Cookie复用的技术原理现代Web应用的安全防护体系中验证码机制扮演着重要角色。从简单的数字验证码到复杂的滑块验证、行为验证甚至手机短信验证这些机制在保护系统安全的同时也给自动化测试带来了巨大挑战。而Cookie复用技术则提供了一种优雅的解决方案。验证码的常见类型及其特点图形验证码传统数字/字母组合OCR技术可破解但准确率有限滑块验证需要模拟人类拖动行为轨迹分析是关键行为验证分析鼠标移动、点击模式等用户行为特征短信验证码需要外部通道介入自动化难度最高Cookie复用的核心在于理解HTTP协议中的会话保持机制。当用户首次登录成功后服务器会下发一组包含身份凭证的Cookie后续请求只需携带这些Cookie即可维持登录状态无需重复验证。# 典型Cookie数据结构示例 { name: session_token, value: a1b2c3d4e5f6, domain: .example.com, path: /, expires: 1735689600, httpOnly: True, secure: True, sameSite: Lax }注意HttpOnly和Secure标志会影响Cookie的访问方式和传输安全性这在自动化测试中需要特别关注。2. 百度网盘案例基础Cookie复用实现百度网盘的验证机制相对简单适合作为入门案例。我们将通过Selenium演示完整的Cookie获取和复用流程。2.1 环境准备与初始Cookie获取首先需要配置测试环境并获取初始Cookiefrom selenium import webdriver from selenium.webdriver.chrome.options import Options # 配置Chrome选项 chrome_options Options() chrome_options.add_argument(--headless) # 无头模式 chrome_options.add_argument(--disable-gpu) chrome_options.add_argument(--window-size1920,1080) driver webdriver.Chrome(optionschrome_options) driver.get(https://pan.baidu.com) # 获取初始Cookie initial_cookies driver.get_cookies() print(初始Cookie:, initial_cookies)2.2 登录流程与关键Cookie识别完成登录操作后对比前后Cookie的变化# 执行登录操作示例代码实际需要替换为有效凭证 driver.find_element_by_id(TANGRAM__PSP_4__userName).send_keys(your_username) driver.find_element_by_id(TANGRAM__PSP_4__password).send_keys(your_password) driver.find_element_by_id(TANGRAM__PSP_4__submit).click() # 等待登录完成 import time time.sleep(5) # 实际项目中应使用显式等待 # 获取登录后Cookie logged_in_cookies driver.get_cookies() print(登录后Cookie:, logged_in_cookies) # 识别关键Cookie key_cookies [c for c in logged_in_cookies if c not in initial_cookies] print(关键Cookie:, key_cookies)2.3 Cookie复用实现将关键Cookie注入新的浏览器会话实现免登录# 新建浏览器实例 new_driver webdriver.Chrome(optionschrome_options) new_driver.get(https://pan.baidu.com) # 必须先访问域名才能设置Cookie # 注入Cookie for cookie in key_cookies: new_driver.add_cookie(cookie) # 验证登录状态 new_driver.get(https://pan.baidu.com/disk/home) time.sleep(3) # 等待页面加载 # 检查登录元素 try: welcome_element new_driver.find_element_by_class_name(user-name) print(登录成功用户名:, welcome_element.text) except: print(登录失败) new_driver.quit()3. 12306复杂验证场景下的高级技巧12306网站的验证机制更为复杂涉及多重验证和严格的安全策略需要更精细的Cookie处理技术。3.1 12306的特殊验证机制分析12306采用了多种验证手段的组合动态图形验证码需要人工识别或高级OCR技术滑块验证模拟人类拖动行为短信二次验证关键操作需要手机验证码频繁访问限制IP和账号级别的访问频率控制3.2 跨域Cookie处理技术12306使用了多个子域名Cookie的domain属性设置需要特别注意# 正确的跨域Cookie处理示例 valid_cookies [ { name: RAIL_EXPIRATION, value: xxxxxxxx, domain: .12306.cn, path: / }, { name: RAIL_DEVICEID, value: yyyyyyyy, domain: .12306.cn, path: / } ] driver.get(https://www.12306.cn) for cookie in valid_cookies: # 必须确保domain匹配当前页面域名或父域名 driver.add_cookie(cookie)3.3 HttpOnly和Secure Cookie的处理对于标记为HttpOnly的Cookie无法通过JavaScript直接读取但可以通过浏览器开发者工具手动提取使用Chrome开发者工具F12进入Application → Cookies手动记录关键Cookie的值和属性在测试脚本中硬编码或通过外部配置引入重要提示包含敏感信息的Cookie应当加密存储不要直接硬编码在脚本中。4. 企业级自动化测试框架集成将Cookie复用技术整合到企业级测试框架中需要考虑更多的工程化因素。4.1 Cookie管理策略对比策略类型实现方式优点缺点适用场景实时获取每次测试前获取新Cookie有效性高效率低依赖验证码破解开发调试持久化存储将Cookie保存到数据库/文件效率高可能过期失效回归测试混合模式优先使用存储Cookie失效时重新获取平衡效率与可靠性实现复杂持续集成4.2 测试框架集成示例以下是与PyTest框架集成的示例代码import pytest import json from selenium import webdriver pytest.fixture(scopesession) def auth_cookies(): 获取并缓存认证Cookie driver webdriver.Chrome() driver.get(https://pan.baidu.com) # 如果存在保存的Cookie文件直接加载 try: with open(cookies.json, r) as f: cookies json.load(f) for cookie in cookies: driver.add_cookie(cookie) except FileNotFoundError: # 执行登录流程 perform_login(driver) # 保存Cookie到文件 with open(cookies.json, w) as f: json.dump(driver.get_cookies(), f) cookies driver.get_cookies() driver.quit() return cookies def perform_login(driver): 执行登录操作 # 实际的登录代码 pass pytest.fixture def authed_browser(auth_cookies): 返回已认证的浏览器实例 driver webdriver.Chrome() driver.get(https://pan.baidu.com) # 必须先访问域名 for cookie in auth_cookies: driver.add_cookie(cookie) yield driver driver.quit() def test_file_upload(authed_browser): 测试文件上传功能 authed_browser.get(https://pan.baidu.com/disk/home) # 执行上传测试断言4.3 最佳实践与常见问题排查Cookie复用的最佳实践定期刷新机制设置Cookie有效期检查避免使用过期凭证多账号支持设计灵活的账号切换机制异常处理完善Cookie失效后的自动恢复流程安全存储敏感Cookie信息加密存储常见问题排查指南Cookie不生效检查domain和path属性是否匹配目标页面确认浏览器已先访问过目标域名验证Cookie是否已过期登录状态丢失检查是否有HttpOnly标记的必需Cookie遗漏确认Secure标记的Cookie在HTTPS环境下使用验证SameSite属性是否阻止了跨站请求验证码突然出现服务器可能检测到异常行为触发了风控尝试降低操作频率模拟人类行为模式检查IP地址是否被限制在实际项目中我们发现最稳定的方案是结合Cookie复用与验证码识别服务形成降级方案。当Cookie失效时自动切换到验证码识别流程既保证了测试效率又提高了稳定性。