影刀RPA 网页登录处理:表单登录与状态判断

发布时间:2026/7/23 5:50:05

影刀RPA 网页登录处理:表单登录与状态判断 影刀RPA 网页登录处理表单登录与状态判断作者林焱什么情况用什么很多网站的数据需要登录后才能看到——订单详情、个人消息、后台数据。在影刀RPA里需要自动化完成输入账号密码→处理验证码→点击登录→判断是否成功→保持登录态。登录是很多采集流程的前置步骤处理不好后面的数据都拿不到。适用场景后台数据采集、个人订单导出、需要登录的社交平台采集、企业内部系统自动化操作。怎么做基本登录流程店群矩阵自动化突破运营极限1. 【打开网页】→ 登录页面URL 2. 【等待元素出现】→ 账号输入框 3. 【输入文本】→ 账号 4. 【输入文本】→ 密码 5. 【点击元素】→ 登录按钮 6. 【等待页面跳转】→ 等待URL变化或登录后元素出现 7. 【判断】→ 登录是否成功影刀RPA登录流程【打开网页】https://example.com/login 【等待元素出现】 目标#username 超时10秒 【输入文本】 目标#username 内容yd_var[account] 【输入文本】 目标#password 内容yd_var[password] ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e906e5862eea4bf2aa4f7d9278305646.png#pic_center) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a889aba591494177b36e25a1eb0a666c.png#pic_center) 【点击元素】 目标#login-btn 【等待URL变化】 超时15秒 【判断元素是否存在】 目标.user-avatar, .welcome-msg 存在 → 登录成功 不存在 → 登录失败检查错误提示登录状态判断defcheck_login_status(driverNone):判断登录是否成功# 方法1检查URL是否变化登录后通常会跳转# 影刀中用【获取当前URL】对比# 方法2检查登录后才有的元素# 影刀中用【判断元素是否存在】→ .user-info# 方法3检查错误提示# 影刀中用【判断元素是否存在】→ .error-msg# Python实现逻辑checks{success_selectors:[.user-avatar,.welcome-msg,.logout-btn],error_selectors:[.error-msg,.login-error,.alert-danger],}# 检查成功标志forselectorinchecks[success_selectors]:ifelement_exists(selector):return{status:success,message:登录成功}# 检查错误标志forselectorinchecks[error_selectors]:error_elget_element_text(selector)iferror_el:return{status:error,message:error_el}return{status:unknown,message:无法判断登录状态}Cookie保持登录态importrequestsimportjsonimportosclassLoginManager:登录管理器def__init__(self,cookie_filecookies.json):self.sessionrequests.Session()self.cookie_filecookie_file self.headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64)}deflogin(self,username,password,login_url):登录并保存Cookielogin_data{username:username,password:password,remember:true}responseself.session.post(login_url,datalogin_data,headersself.headers,timeout10)# 检查登录结果ifresponse.status_code200:resultresponse.json()ifresult.get(success)orresult.get(code)0:# 保存Cookieself.save_cookies()returnTruereturnFalsedefsave_cookies(self):保存Cookie到文件cookiesself.session.cookies.get_dict()withopen(self.cookie_file,w)asf:json.dump(cookies,f)print(fCookie已保存到{self.cookie_file})defload_cookies(self):从文件加载Cookieifnotos.path.exists(self.cookie_file):returnFalsewithopen(self.cookie_file,r)asf:cookiesjson.load(f)forname,valueincookies.items():self.session.cookies.set(name,value)returnTruedefis_logged_in(self,check_url):检查登录态是否有效responseself.session.get(check_url,headersself.headers,timeout10)# 如果重定向到登录页说明Cookie失效iflogininresponse.url:returnFalse# 检查返回内容if请登录inresponse.textor未登录inresponse.text:returnFalsereturnTruedefensure_login(self,username,password,login_url,check_url):确保已登录Cookie有效则跳过登录# 先尝试用已保存的Cookieifself.load_cookies()andself.is_logged_in(check_url):print(Cookie有效跳过登录)returnTrue# Cookie失效重新登录print(Cookie失效重新登录...)ifself.login(username,password,login_url):print(登录成功)returnTrueprint(登录失败)returnFalse# 使用managerLoginManager(rC:\Config\cookies.json)ifmanager.ensure_login(myuser,mypass,https://example.com/api/login,https://example.com/api/userinfo):# 登录成功可以采集数据responsemanager.session.get(https://example.com/api/orders)dataresponse.json()影刀RPA中的Cookie管理【设置变量】cookie_file rC:\Config\cookies.json 【判断文件是否存在】cookie_file 存在 → 【读取文件】→ 加载Cookie 【注入Cookie到浏览器】 【打开网页】→ 检查页面 【判断元素是否存在】→ .user-info 存在 → Cookie有效跳过登录 不存在 → Cookie失效执行登录流程 不存在 → 执行登录流程 【登录流程】 【打开网页】→ 登录页 【输入文本】→ 账号 【输入文本】→ 密码 【点击元素】→ 登录按钮 【等待URL变化】 【获取Cookie】→ 保存到文件多账号登录管理classMultiAccountManager:多账号管理def__init__(self,accounts_file): accounts_file: JSON文件格式 [ {username: acc1, password: pwd1, name: 账号1}, {username: acc2, password: pwd2, name: 账号2} ] withopen(accounts_file,r)asf:self.accountsjson.load(f)self.current_accountNone![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/f13849b951a444aab857d06068868e0c.png#pic_center)defget_account(self,index):获取指定账号if0indexlen(self.accounts):self.current_accountself.accounts[index]returnself.current_accountreturnNonedefget_cookie_file(self,account):获取账号对应的Cookie文件safe_nameaccount[name].replace( ,_)returnrfC:\Config\cookies_{safe_name}.json有什么坑坑1密码框被禁用或加密temu店群自动化报活动案例有些网站的密码框是先点击启用再输入或者密码需要前端加密# 解决1先点击密码框再输入# 影刀中# 【点击元素】→ #password# 【等待】0.5秒# 【输入文本】→ 密码# 解决2密码加密# 查看网站JS代码找到加密算法# 常见的是MD5、Base64、RSAimporthashlib encrypted_passwordhashlib.md5(password.encode()).hexdigest()# 解决3用JavaScript直接设值并触发事件jsf var pwd document.querySelector(#password); pwd.value {password}; pwd.dispatchEvent(new Event(input)); pwd.dispatchEvent(new Event(change)); # 影刀【执行JavaScript代码】坑2登录后页面跳转多次# 问题登录后先跳中间页再跳首页等待URL变化可能提前触发# 解决等待最终目标页面的特征元素# 影刀中【等待元素出现】→ .dashboard首页特征元素# 而不是【等待URL变化】# 或者等待URL稳定defwait_for_url_stable(old_url,timeout15):等待URL稳定不变importtime stable_count0last_urlfor_inrange(timeout):![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d5d17278de5345f1938d0a6ca90c25d0.png#pic_center)time.sleep(1)current_urlget_current_url()# 影刀指令ifcurrent_urllast_urlandcurrent_url!old_url:stable_count1ifstable_count2:returncurrent_urlelse:stable_count0last_urlcurrent_urlreturnlast_url坑3登录触发验证码# 解决1检测验证码出现# 影刀中# 【判断元素是否存在】→ .captcha-image# 存在 → 执行验证码处理流程# 解决2降低登录频率# 同一账号10分钟内不要重复登录# 解决3记住登录状态# 登录时勾选记住我/7天免登录# 保存Cookie下次直接用Cookie# 解决4验证码识别如果必须处理# 影刀中# 【截图】→ 验证码区域# 【执行Python代码】→ OCR识别或打码平台# 【输入文本】→ 识别结果坑4Cookie过期时间不确定# 问题Cookie可能1小时过期也可能7天过期# 解决每次使用前检查defsafe_request(session,url,login_funcNone):安全请求自动处理登录态过期responsesession.get(url,timeout10)# 检测是否被重定向到登录页iflogininresponse.urlorresponse.status_code401:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7f6b22441bb242cdafa5afa7e980f307.png#pic_center)iflogin_func:print(登录态过期重新登录...)login_func()responsesession.get(url,timeout10)returnresponse坑5HTTPS证书问题# 问题企业内部系统用自签证书requests报SSLError# 解决禁用证书验证仅限内部系统responsesession.get(url,verifyFalse,timeout10)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/37d36621a5b34f6f9e2a818c8a133c63.png#pic_center)# 或者用影刀浏览器不受证书限制# 影刀浏览器默认忽略证书错误

相关新闻