网站建设工作室有几个部门,知名网站设计欣赏,seo网络优化是什么意思,手机绘图app软件下载在RPA的众多应用场景的探索中#xff0c;自动登录是一个至关重要的环节#xff0c;它为后续的自动化操作奠定了基础。然而#xff0c;当我们面对滑块验证这一常见的挑战时#xff0c;常常会感到困惑和无从下手。本文就来分享自动登录RPA的进阶----滑块验证如何实现。
在…在RPA的众多应用场景的探索中自动登录是一个至关重要的环节它为后续的自动化操作奠定了基础。然而当我们面对滑块验证这一常见的挑战时常常会感到困惑和无从下手。本文就来分享自动登录RPA的进阶----滑块验证如何实现。
在分享自动登录RPA的进阶之前我们先来了解一个工具包–ddddocr
一、ddddocr验证码识别的利器
ddddocr是一个功能强大的验证码识别工具包专门用于处理各种复杂的验证码包括滑块验证码、文字点选、算术、字母、数字等类型。它基于深度学习技术能够准确地识别图像中的滑块位置并提供相应的操作指令。
二、使用ddddocr实现滑块验证
在先前的探索中如《揭秘AIRPACSDN热榜数据抓取RPA与AI融合之道-CSDN博客》和《揭秘AIRPACSDN 自动登录 RPA 的实现之道-CSDN博客》的所述我们可以成功获取到谷歌浏览器的客户端。 option ChromiumOptions().set_paths(local_portport).set_argument(--start-maximized)client ChromiumPage(addr_or_optsoption, timeout10)本文以知乎账号密码登录时的滑块验证为例展示如何利用 ddddocr 来攻克这一难题。
1. 寻找拖拽的iframe标签
首先我们需要在页面中找到拖拽滑块的 iframe 标签这是后续操作的基础。 iframe client.get_frame(1)sleep(1)2. 获取完整图片
接下来获取包含滑块背景的完整图片。通过定位完整图片的元素并获取其图片的 URL然后使用 requests 库获取图片数据。 image_ele iframe.ele(id:yidun_bg-img)image_url image_ele.attr(src)response requests.get(image_url)if response.status_code 200:image_data response.contentelse:raise Exception(Failed to retrieve the image)3. 获取缺口图片
和2一样的方法获取带有缺口的图片数据。 gap_image_ele iframe.ele(id:yidun_jigsaw)gap_image_url image_ele.attr(src)response requests.get(image_url)if response.status_code 200:gap_image_data response.contentelse:raise Exception(Failed to retrieve the gap image)4. 利用ddddocr工具包计算缺口的位置
这里是很关键的一步使用 ddddocr 工具包的强大功能来计算缺口的准确位置。 slider_ocr ddddocr.DdddOcr(detTrue,show_adFalse)slider_ocr.slide_match(gap_image_data, image_data)target result.get(target)让我们来分析一下slide_match方法在我们的例子中走的是else分支所以simple_target对象先忽略。 该方法中有两个核心方法cv2.matchTemplate和cv2.minMaxLoccv2.matchTemplate使用了相关系数归一化方法进行目标图像和背景图像的匹配而cv2.minMaxLoc方法用于在cv2.matchTemplate方法匹配的结果中获取最小、最大匹配值以及位置。 def slide_match(self, target_bytes: bytes None, background_bytes: bytes None, simple_target: bool False,flag: bool False):if not simple_target:……# 会走elseelse:target cv2.imdecode(np.frombuffer(target_bytes, np.uint8), cv2.IMREAD_ANYCOLOR)target_y 0target_x 0background cv2.imdecode(np.frombuffer(background_bytes, np.uint8), cv2.IMREAD_ANYCOLOR)background cv2.Canny(background, 100, 200)target cv2.Canny(target, 100, 200)background cv2.cvtColor(background, cv2.COLOR_GRAY2RGB)target cv2.cvtColor(target, cv2.COLOR_GRAY2RGB)# 核心方法1使用相关系数归一化方法进行目标图像和背景图像的匹配。# res是一个二维数组大小与背景图像大小一致每个位置表示目标图像在该位置与背景图像的匹配程度范围是(-1, 1)res cv2.matchTemplate(background, target, cv2.TM_CCOEFF_NORMED)# 核心方法2通过minMaxLoc获取最小、最大匹配值以及位置min_val, max_val, min_loc, max_loc cv2.minMaxLoc(res)h, w target.shape[:2]# 图像坐标系通常以左上角为原点向右为 x 轴正方向向下为 y 轴正方向。bottom_right (max_loc[0] w, max_loc[1] h)return {target_y: target_y,target: [int(max_loc[0]), int(max_loc[1]), int(bottom_right[0]), int(bottom_right[1])]}5. 计算滑块滑动的轨迹
由slide_match方法可知target是一个对象。target的key对应的value是一个list分别对应最大匹配位置的坐标以及从该坐标开始的h * w的区域的右下角的坐标。即背景图像缺失的图像的x轴的坐标点为target[0]。
有了target[0]我们就可以利用高中物理学到的匀加速运动的位移公式和速度公式计算出滑动从起点到target[0]滑动的轨迹点。
让我们先来回顾下高中物理中的这些公式 速度公式 v v 0 a t v v_0 at vv0at 其中是v末速度是v0是初速度a是加速度t是时间。 位移公式 s v 0 t 1 2 a t 2 s v_0t \frac{1}{2}at^2 sv0t21at2 其中s是位移。
以下是公式的代码实现。 v, t, acc_dis 0, 0.5, 0plus []while acc_dis distance:if acc_dis mid:a round(random.uniform(1.0, 2.0), 1)else:a -round(random.uniform(1.0, 2.0), 1)s v * t 0.5 * a * (t ** 2)v v a * tacc_dis splus.append(round(s))6. 让RPA模拟人的动作移动滑块到指定位置
最后一步让 RPA 模拟人类的动作将滑块移动到指定位置。 move_btn iframe.ele(class:yidun_control)iframe.actions.hold(move_btn)for track in plus:iframe.actions.move(offset_xtrack,# y轴的偏移可以指定随机值offset_yround(random.uniform(1, 10), 0),duration0.1)time.sleep(0.1)iframe.actions.release(move_btn)三、总结
在 RPA 的探索中自动登录是一个关键环节而滑块验证则是一个常见的挑战。本文通过使用 ddddocr 工具包有效地解决了滑块验证问题实现自动登录 RPA 的进阶。当然在实际应用场景中我们还需要根据具体的情况进行调整和优化以确保 RPA 程序的稳定性和可靠性。