影刀RPA 网页登录与会话管理Cookie/Token处理完全指南作者林焱|阅读时长10分钟|难度⭐⭐⭐进阶很多网站需要登录后才能操作——采集数据、提交表单、导出报表…登录态管理是RPA中最常见也最容易出问题的环节。本文彻底讲清楚Cookie、Token、Session的处理方式让你不再被登录过期困扰一、为什么登录管理这么重要1.1 你一定遇到过这些情况现象原因影响流程跑到一半突然提示请先登录Session/Cookie过期整个流程中断前功尽弃每次运行都要手动扫码/输验证码没有保存登录状态无法实现无人值守切换账号后数据串了多个账号的Cookie混淆数据错误同一网站打开多个标签页互相影响共享Session导致冲突操作错乱1.2 登录态的本质用户登录流程 浏览器/客户端 服务器 │ │ │ 1. 输入账号密码 │ │ ────────────────── │ │ │ 验证身份 │ 2. 返回 Cookie/Token│ │ ────────────────── │ │ │ │ 3. 后续请求带上Cookie/Token │ ────────────────── │ │ │ 验证有效性 → 返回数据 │ 4. 获取到数据 │ │ ────────────────── │ 核心概念 ┌─────────────┬──────────────────────────────────────┐ │ Cookie │ 服务器通过Set-Cookie头下发给浏览器 │ │ │ 浏览器后续自动带回用于标识你是谁 │ ├─────────────┼──────────────────────────────────────┤ │ Token │ 通常是JWT格式服务器验证签名即可 │ │ │ 无需服务端存储Session无状态认证 │ ├─────────────┼──────────────────────────────────────┤ │ Session │ 服务器端存储的会话记录 │ │ │ 通过SessionID(Cookie)关联 │ └─────────────┴──────────────────────────────────────┘二、方案一使用已登录的浏览器最简单2.1 原理直接调用用户本地已经登录过的浏览器配置文件继承已有的登录状态。适用场景目标网站是内部系统OA、CRM、ERP登录方式复杂短信验证码、扫码、VPN不频繁更换账号2.2 影刀RPA中的实现# 方式一使用默认浏览器配置文件推荐打开浏览器(使用用户配置文件True,配置文件路径C:/Users/{用户名}/AppData/Local/Google/Chrome/User Data)# 此时浏览器会带着所有已登录的Cookie# 直接访问需要登录的页面即可导航到(https://internal.company.com/dashboard)2.3 注意事项要点说明浏览器必须关闭不能在有Chrome窗口运行时使用同一配置文件锁文件冲突路径要准确不同浏览器的配置文件路径不同见下方Profile选择如果有多个Chrome Profile指定正确的子目录名安全性适合个人自动化不适合多用户共享2.4 各主流浏览器配置文件路径店群矩阵自动化突破运营极限Windows: Chrome: C:\Users\{用户名}\AppData\Local\Google\Chrome\User Data Edge: C:\Users\{用户名}\AppData\Local\Microsoft\Edge\User Data Firefox: C:\Users\{用户名}\AppData\Roaming\Mozilla\Firefox\Profiles\{随机字符串}.default-release三、方案二手动模拟登录流程最通用3.1 基本步骤当不能使用已有登录态时比如需要在服务器上运行就需要完整模拟登录过程。模拟登录完整流程 1. 打开登录页面 ↓ 2. 输入用户名 → 元素捕获输入框 → 填写 ↓ 3. 输入密码 → 元素捕获输入框 → 填写 ↓ 4. [可选] 处理验证码 ├── 图片验证码 → OCR识别或打码平台 ├── 滑块验证 → 模拟滑动轨迹 ├── 短信验证码 → 接收短信并填写 └── 扫码登录 → 等待用户扫码需人工介入 ↓ 5. 点击登录按钮 ↓ 6. 等待跳转成功 ↓ 7. 保存当前Cookie/Token供后续使用 ↓ 8. 继续执行目标操作...3.2 完整代码示例# 第一步打开登录页面 打开浏览器()导航到(https://example.com/login)等待页面加载完成()# 第二步填写账号密码 # 捕获用户名输入框用户名框捕获元素(选择器#username)输入文本(用户名框,your_username)# 捕获密码输入框密码框捕获元素(选择器#password)输入文本(密码框,your_password)# 第三步处理验证码 验证码图片捕获元素(选择器#captcha-img)截图元素(验证码图片,保存为temp_captcha.png)# 调用OCR识别验证码识别结果OCR识别(temp_captcha.png)验证码输入框捕获元素(选择器#captcha-input)输入文本(验证码输入框,识别结果.文本)# 第四步点击登录 登录按钮捕获元素(选择器#login-btn)点击(登录按钮)# 第五步等待登录成功 #等待条件(条件URL包含(/dashboard),超时时间10秒)输出日志(✅ 登录成功)# 第六步保存Cookie 当前Cookies获取所有Cookies()保存到文件(当前Cookies,cookies.json)输出日志(f已保存{len(当前Cookies)}个Cookie)3.3 常见表单元素的选择器策略# 不同网站的登录表单结构不同以下是常见模式# 模式1: 标准form input用户名#username或[nameusername]密码#password或[typepassword]# 模式2: React/Vue组件动态属性用户名input[placeholder*用户]密码input[placeholder*密码]登录按钮button[typesubmit]# 模式3: iframe内嵌登录框切换到Iframe(#login-iframe)用户名#username# iframe内的元素...操作完成后切回主框架...# 模式4: 第三方登录QQ/微信/支付宝第三方按钮.third-party-login .icon-qq点击(第三方按钮)等待弹出二维码/跳转四、方案三API接口直接登录最高效4.1 原理绕过浏览器界面直接用HTTP请求调用登录接口获取Token后续所有请求带上Token即可。优势速度极快毫秒级 vs 秒级资源消耗低不需要启动浏览器更稳定不依赖UI元素前置条件需要知道登录接口的URL和参数格式通常需要抓包分析4.2 抓包分析方法使用浏览器开发者工具抓取登录请求 1. F12 打开开发者工具 → Network网络标签 2. 勾选 Preserve log保留日志 3. 在网页上正常登录一次 4. 在Network列表中找到登录接口请求 5. 查看以下信息 ┌─────────────────────────────────────┐ │ General常规 │ │ Request URL: https://api.xxx.com/auth/login │ │ Request Method: POST │ │ │ │ Request Headers请求头 │ │ Content-Type: application/json │ │ User-Agent: Mozilla/5.0 ... │ │ │ │ Request Payload请求体 │ │ {username:admin,pwd:xxx} │ │ │ │ Response响应 │ │ {code:0,data:{token:...}} │ └─────────────────────────────────────┘4.3 用影刀RPA实现API登录importrequestsimportjson# API登录 登录URLhttps://api.example.com/auth/login请求头{Content-Type:application/json,User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...}请求数据{username:your_username,password:your_password# ⚠️ 注意是否需要加密}响应requests.post(登录URL,headers请求头,json请求数据)结果响应.json()If(结果.code0):Token结果.data.token 输出日志(f✅ 登录成功Token:{Token[:20]}...)Else:输出日志(f❌ 登录失败{结果.message})抛出异常(登录失败)# 使用Token访问受保护的接口 保护接口头{Authorization:fBearer{Token},# 最常见的Token传递方式Content-Type:application/json}# 获取用户信息用户信息requests.get(https://api.example.com/user/info,headers保护接口头).json()# 获取业务数据列表数据列表requests.get(https://api.example.com/data/list,headers保护接口头,params{page:1,size:50}).json()4.4 常见的Token传递方式方式Header名称示例值Bearer TokenAuthorizationBearer eyJhbGciOiJIUzI1NiIs...自定义TokenX-Token/access-tokenabc123xyz456Cookie中的TokenCookiesession_idabc123; tokenxyz456Query参数不推荐URL参数/api/data?tokenabc123五、实战案例一自动登录OA系统导出考勤数据5.1 需求描述公司使用某品牌OA系统每月初HR部门需要从系统中导出上月考勤数据涉及200人的数据。难点OA系统需要域账号登录有图形验证码导出数据需要翻页5.2 完整解决方案主流程: OA考勤数据导出 │ ├── 1. 使用已有浏览器配置文件绕过登录问题 │ 打开浏览器(UserDataDirChrome配置目录) │ ├── 2. 导航到考勤页面 │ 导航到(https://oa.company.com/attendance/monthly) │ ├── 3. 设置日期范围上个月1号~最后一天 │ ├── 点击开始日期选择器 → 选择上月1号 │ └── 点击结束日期选择器 → 选择上月最后一天 │ ├── 4. 点击查询按钮 │ ├── 5. 检查是否需要重新登录 │ If (页面包含登录): │ │ 弹窗提醒浏览器登录已过期请手动登录后继续 │ │ 等待用户操作最长等待5分钟 │ └ 继续检查 │ ├── 6. 循环翻页采集数据 │ 所有数据行 [] │ While (存在下一页): │ 当前页数据 提取表格行() │ 所有数据行.追加(当前页数据) │ 点击下一页 │ 等待加载 │ ├── 7. 写入Excel │ 创建Excel(考勤数据_{月份}.xlsx) │ 写入表头 │ 批量写入所有数据行 │ 保存 │ └── 8. 发送通知 邮件发送( 收件人hrcompany.com, 主题考勤数据已导出 - {月份}, 附件考勤数据_{月份}.xlsx )5.3 关键技巧检测登录状态# 在每次关键操作前检查登录状态def检查登录状态():当前URL获取当前URL()页面源码获取页面源码()# 方式1: 通过URL判断If(当前URL 包含/login)或(当前URL登录页URL):返回False# 方式2: 通过页面特征判断If(请登录in页面源码)或(登录已过期in页面源码):返回False# 方式3: 通过特定元素判断更可靠Try:用户头像元素捕获元素(.user-avatar)# 仅登录后才显示返回TrueCatch:返回False# 使用示例If(not检查登录状态()):# 尝试重新登录或等待人工干预...六、实战案例二多账号轮流登录采集数据6.1 场景temu店群自动化报活动案例某些网站对单个账号有频率限制如每天只能查询100次需要使用多个账号轮流操作来突破限制。6.2 账号隔离方案# 每个账号使用独立的浏览器配置文件独立的Cookie账号列表[{user:account1,pass:pwd1,profile_dir:profile_001},{user:account2,pass:pwd2,profile_dir:profile_002},{user:account3,pass:pwd3,profile_dir:profile_003},]For Each(账号in账号列表):# 使用独立配置文件配置路径fC:/BrowserProfiles/{账号.profile_dir}# 启动浏览器打开浏览器(配置文件路径配置路径)# 检查该账号是否已登录导航到(https://target.com/home)If(需要重新登录()):执行登录(账号.user,账号.pass)等待(2秒)# 等待登录生效# 执行该账号的任务配额如采集30条数据执行采集任务(配额30)# 关闭浏览器释放资源保存Cookie关闭浏览器()# 账号间间隔避免触发风控等待(随机秒数(5,15))6.3 Cookie导入导出# 将登录后的Cookie导出为文件下次直接导入无需重新登录def导出Cookie(浏览器对象,文件路径):Cookies浏览器对象.获取Cookies()JSON写入(Cookies,文件路径)def导入Cookie(浏览器对象,文件路径):CookiesJSON读取(文件路径)For Each(CookieinCookies):浏览器对象.添加Cookie(Cookie)# 工作流# 第一次手动登录 → 导出Cookie# 之后每次启动浏览器 → 导入Cookie → 直接操作无需登录七、常见登录问题与解决方案大全7.1 验证码处理方案对比验证码类型推荐方案成功率成本简单数字/字母无干扰线OCR识别Tesseract/PaddleOCR95%免费带干扰线的字符码OCR 图像预处理70-85%免费滑动验证模拟人类滑动轨迹80-90%免费点选文字/图片AI模型识别YOLO/OCR组合60-75%中等短信验证码自动读取短信需手机接入99%需硬件扫码登录等待人工扫码100%需人工reCAPTCHA/hCaptcha第三方打码平台90-98%付费7.2 二次验证/MFA处理很多企业系统启用了双因素认证2FA处理思路 方案1: 使用专用设备/软件令牌 ├── 安装TOTP应用如Authy/微软 Authenticator ├── RPA调用TOTP库生成动态验证码 └── 自动填入验证码 方案2: 使用记住设备功能 ├── 首次登录时勾选信任此设备 / 30天内免验证 └── 之后30天内在同一台电脑无需二次验证 方案3: 预生成的备用码 ├── 在账号设置中生成一批一次性备用码 ├── RPA依次使用备用码每个只能用一次 └── 及时补充新的备用码7.3 登录状态保持与刷新# 问题长时间运行的RPA任务可能中途登录过期# 解决定时刷新登录状态上次活动时间当前时间()def确保登录有效():全局 上次活动时间# 如果超过30分钟没有活动主动刷新If(当前时间()-上次活动时间30分钟):# 方式1: 访问一个需要登录的轻量接口响应访问(https://example.com/api/ping)If(响应状态码401):# 未授权重新登录()Else:上次活动时间当前时间()returnTrue# 在每次请求前调用确保登录有效()执行业务操作()八、安全最佳实践安全维度具体措施凭证安全账号密码不要写在代码中使用加密配置文件或环境变量传输安全使用HTTPS避免在明文HTTP中传输凭据Cookie安全Cookie文件设置权限防止其他程序读取日志脱敏日志中不要打印完整的Token和密码账号隔离不同任务使用不同账号避免单个被封影响全部频率控制合理控制请求频率避免触发风控导致封号法律合规仅在授权范围内使用遵守目标网站的服务条款和robots.txt九、学习小结技能点难度使用频率核心要点已登录浏览器配置文件⭐☆☆★★★★★最省事适合个人场景模拟登录含验证码⭐⭐⭐★★★★☆最通用应对各种网站API直接登录⭐⭐☆★★★★★最高效需要抓包分析Cookie导入导出⭐⭐☆★★★★☆复用登录态的关键技能多账号轮换⭐⭐⭐★★★☆☆突破频率限制登录过期检测与恢复⭐⭐⭐★★★★★长时间运行必备一句话总结能用已有浏览器配置就用配置文件最简单不行就模拟登录最通用再不行就走API最高效。三种方案按需选用配合Cookie持久化和登录检测机制基本能解决所有登录相关的问题下一篇预告《影刀RPA 变量与数据类型详解字符串、列表、字典、日期全掌握》— 数据是RPA的灵魂玩转变量才能写出灵活的流程关键词影刀RPA、登录自动化、Cookie管理、Token认证、Session维持、网页自动化、验证码处理、RPA进阶教程