影刀RPA 验证码打码平台对接:自动化流程的最后一道坎
影刀RPA 验证码打码平台对接自动化流程的最后一道坎作者林焱自动化流程遇到验证码是最让人崩溃的。但是验证码不是无解的——有很多打码平台人工AI识别可以帮你过。这篇文章讲怎么在影刀中接入打码平台。验证码类型分级类型识别难度解决方案简单数字/字母低OCR/tesseract可直接识别滑块验证中距离计算轨迹模拟点选验证码高打码平台| 行为验证极验、网易易盾 | 极高 | 打码平台轨迹模拟 || reCAPTCHA | 最高 | 几乎无解建议绕道 |方案一OCR识别简单验证码拼多多店群自动化上架方案importrequestsfromPILimportImageimportpytesseract# 1. 影刀截图验证码元素# 2. Python处理图片imgImage.open(captcha.png)# 灰度化imgimg.convert(L)# 二值化imgimg.point(lambdax:0ifx128else255)# OCR识别textpytesseract.image_to_string(img,config--psm 7)print(f识别结果:{text.strip()})OCR只适用于最原始的验证码背景干净、字体规整。现在的网站基本没有这种验证码了。方案二对接打码平台推荐以超级鹰为例按次收费几块钱能识别几百次importrequestsimportbase64importhashlibclassChaojiying:def__init__(self,username,password,soft_id):self.usernameusername self.passwordpassword self.soft_idsoft_id self.base_urlhttps://upload.chaojiying.net/Upload/Processing.phpdefrecognize(self,image_path,code_type1902):识别验证码 code_type: 1902通用验证码, 9004坐标题 withopen(image_path,rb)asf:image_base64base64.b64encode(f.read()).decode()data{user:self.username,pass2:hashlib.md5(self.password.encode()).hexdigest(),softid:self.soft_id,codetype:code_type,file_base64:image_base64}resprequests.post(self.base_url,datadata)resultresp.json()ifresult[err_no]0:returnresult[pic_str]# 识别结果else:returnNone# 使用cjChaojiying(你的用户名,你的密码,软件ID)codecj.recognize(captcha.png)print(f打码结果:{code})费用参考超级鹰1000次约10元。对于自动化的成本来说几乎可以忽略。滑块验证码处理fromseleniumimportwebdriverfromselenium.webdriver.common.action_chainsimportActionChainsimporttimedefsolve_slider(driver,slider_selector,track_selector):处理滑块验证码需要先计算缺口距离sliderdriver.find_element_by_css_selector(slider_selector)# 1. 计算缺口距离可以用opencv比对背景图和缺口图# 这里简化假设通过打码平台返回了距离distanceresponsecj.recognize(slider_captcha.png,code_type9101)distancefloat(response.split(,)[0])# 2. 模拟拖动轨迹actionActionChains(driver)action.click_and_hold(slider).perform()# 模拟人的拖动先快后慢 中途微调trackgenerate_track(distance)forxintrack:action.move_by_offset(x,random.randint(-2,2))# Y轴加随机抖动action.perform()time.sleep(random.uniform(0.001,0.003))# 超过一点再回来模拟人拖过头了action.move_by_offset(random.randint(-5,-2),0).perform()time.sleep(0.1)action.release().perform()defgenerate_track(distance):生成拖动轨迹非匀速先快后慢track[]current0middistance*0.7# 减速阈值whilecurrentdistance:ifcurrentmid:arandom.randint(3,5)# 加速阶段else:arandom.randint(-3,-1)# 减速阶段movemax(a,1)# 最少移动1pxcurrentmove track.append(move)returntrack踩坑实录坑1打码平台响应慢打码平台是人机结合大部分靠机器疑难验证码靠人工响应时间2-15秒不等。你的影刀流程需要等待不要设太短超时并做好超时处理。TEMU店群如何管理运营坑2滑块轨迹太机械如果轨迹是匀速直线反爬系统一眼识破。必须模拟人的拖动特征加速→匀速→减速→超出→回退→释放。每个阶段的参数都要随机化。坑3打码平台的code_type要匹配每个打码平台有不同的验证码类型编码。数字验证码和坐标点选是不同的code_type。传错了类型平台返回的结果和你期望的格式不一致。坑4极验/腾讯验证码不是滑块那么简单这类新一代验证码不仅拖滑块还会采集你拖动过程中的几百个行为特征鼠标移动轨迹、加速度变化、在页面上的停留时间等。即使你拖对了位置如果行为特征不像人还是过不了。对于极验级别的验证码最稳妥的方案是绕过找到不需要验证码的API接口。避坑最佳实践优先绕道找目标网站的移动端API、小程序API常比PC端验证弱复用Session同一个Session下的验证会越来越少合理频率不要触发验证码人工辅助弹验证码时影刀暂停并通过通知提醒人工处理写在最后验证码是RPA的最大拦路虎。我的建议是能用API就别走浏览器、能保持登录态就别反复登录、能降低频率就别疯狂请求。打码平台是最后的手段不是首选方案。大多数情况下你的问题不是怎么过验证码而是为什么触发了验证码。