文字验证码(点击文字)
-
模板匹配(从一张图片中寻找 icon),放弃,目前准确率不高,且处理过程复杂- 灰度处理
- 将 complete_image_path 截取并另存为 target_image_path, verify_image_path
- 将 target_image_path 截取并另存为 icon
- 从 verify_image_path 中找到 icon
-
借助 ddddocr
- ddddocr
- 直接将 complete_image_path,target_image_path,verify_image_path 丢给 ddddocr 获取结果
主要代码
save_image
def save_image(style_value):"""保存图片(目标图片 和 验证图片)"""# 获取验证图片bg_img_url = re.search(r"""url\("(?P<url>.*?)"\);""", style_value)bg_img_width = re.search(r""".*width:.*?(?P<width>.*?)px;""", style_value)bg_img_height = re.search(r""".*height:.*?(?P<height>.*?)px;""", style_value)bg_img_right = re.search(r""".*right:.*?(?P<right>.*?)px;""", style_value)bg_img_top = re.search(r""".*top:.*?(?P<top>.*?)px;""", style_value)complete_image_path = Noneimage_name = ""size_info = {}if bg_img_url:url = bg_img_url.groupdict().get("url", "")re_image_name = re.search(r""".*/(?P<image_name>.*?).jpg\?""", url)if re_image_name:temp_key = "image_name"image_name = re_image_name.groupdict().get(temp_key, "")size_info.update(bg_img_width.groupdict())size_info.update(bg_img_height.groupdict())size_info.update(bg_img_right.groupdict())size_info.update(bg_img_top.groupdict())data = requests.get(url, verify=False)complete_image_path = f"{base_path}{image_name}_complete.jpg"# 保存验证图片(原图)with open(complete_image_path, "wb") as wbf:wbf.write(data.content)image_obj = cv2.imread(complete_image_path)height, width, channel = image_obj.shapefor element_key, element_value in size_info.items():size_info[element_key] = int(element_value)point = (0, height-size_info["height"], size_info["width"], height)image_crop_target = image_obj[height-size_info["height"]:height, 0:size_info["width"]]image_crop_verify = image_obj[0:height-size_info["height"], 0:width]# 保存目标图片target_image = f"{image_name}_target.jpg"target_image_path = f"{base_path}{target_image}"# cv2.imshow("image_crop", image_crop_target)# cv2.waitKey(0)cv2.imwrite(target_image_path, image_crop_target)# 保存verify图片verify_image = f"{image_name}_verify.jpg"verify_image_path = f"{base_path}{verify_image}"# cv2.imshow("image_crop", image_crop_target)# cv2.waitKey(0)cv2.imwrite(verify_image_path, image_crop_verify)return complete_image_path, target_image_path, verify_image_path
save_image_crop
def save_image_crop(image_path, width_size = 26):"""裁切目标图片"""image_obj = Image.open(image_path)width, height = image_obj.width, image_obj.height left_top_point = [] # 左上for i in range(0, width, width_size):left_top_point.append((i, 0))right_bottom_point = [] # 右下for i in range(width_size, width, width_size):right_bottom_point.append((i, height))crop_target_list = []min_len = min(len(left_top_point), len(right_bottom_point))for i in range(min_len):temp_list = []temp_list.extend(left_top_point[i])temp_list.extend(right_bottom_point[i])point = tuple(temp_list) image_crop = image_obj.crop(point)re_image_name = re.search(r""".*/(?P<image_name>.*?).jpg""", image_path)image_name = ""if re_image_name:temp_dict = re_image_name.groupdict()image_name = temp_dict["image_name"] image_name_list = image_name.split("_")image_name_list.append(str(i))new_image_name = "_".join(image_name_list)new_image_path = f"{base_path}/{new_image_name}.jpg"image_crop.save(new_image_path)crop_target_list.append(new_image_path)return crop_target_list, height
object_detection
def object_detection(complete_image_path):det = ddddocr.DdddOcr(det=True, show_ad=False)with open(complete_image_path, 'rb') as f:image = f.read()poses = det.detection(image)print(poses) im = cv2.imread(complete_image_path)for box in poses:x1, y1, x2, y2 = boxim = cv2.rectangle(im, (x1, y1), (x2, y2), color=(0, 0, 255), thickness=2)cv2.imshow("object_detection", im)cv2.waitKey(0)
main
if __name__ == "__main__":driver = get_driver() driver.get('https://www.bixxxxli.com/')click_element(driver, """ //div[@class="header-login-entry"] """)click_element(driver, """ //div[@class="login-tab-item"] """)input_element(driver, """ //div[@class="login-sms-wp__cid"]/../input """, "15266666666")click_element(driver, """ //div[@class="login-sms-wp__cid"]/../div[@class="login-sms-send clickable "] """)style_value = get_element_value(driver, """ //div[@class="geetest_widget"]//div[@class="geetest_tip_img"] """, "style")complete_image_path, target_image_path, verify_image_path = save_image(style_value)object_detection(complete_image_path)object_detection(target_image_path)object_detection(verify_image_path)print
Source Code
到此结 DragonFangQy 2024.03.02
本博文仅供学习参考之用,不得用于其他任何目的。如有任何内容侵犯到您的隐私或权益,敬请立即联系我,我将及时删除或修正相关内容。感谢您的理解与支持,期待与您共同维护一个友善、尊重知识产权的网络环境。