热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

极验验证码破解之selenium

这一篇写完很久了,因为识别率一直很低,没办法拿出来见大家,所以一直隐藏着,今天终于可以拿出来见见阳光了。哈喽,大家好,我是星星在线,我又来了,今天给大家带来的是极验验证码的selenium破解之法

这一篇写完很久了,因为识别率一直很低,没办法拿出来见大家,所以一直隐藏着,今天终于可以拿出来见见阳光了。

哈喽,大家好,我是星星在线,我又来了,今天给大家带来的是极验验证码的selenium破解之法,是不是有点小激动呢,小伙伴们等不了了,让我们赶紧直入主题吧。

虎嗅网注册

这次我们是拿虎嗅开刀,注册账号的时候需要滑动图片到缺口位置,这种验证码我们现在也经常遇到,这个就不用详细介绍了吧
) full_image.save("full.jpg") # 根据两个图片计算距离 distance = self.get_offset_distance(cut_image, full_image) # 开始移动 self.start_move(distance) # 如果出现error try: WebDriverWait(self.driver, 5, 0.5).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="gt_ajax_tip gt_error"]'))) print("验证失败") return except TimeoutException as e: pass # 判断是否验证成功 try: WebDriverWait(self.driver, 10, 0.5).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="gt_ajax_tip gt_success"]'))) except TimeoutException: print("again times") time.sleep(5) # 失败后递归执行拖动 self.analog_drag() else: # 成功后输入手机号,发送验证码 self.register() # 获取图片和位置列表 def get_image_url(self, xpath): link = re.compile('background-image: url\("(.*?)"\); background-position: (.*?)px (.*?)px;') elements = self.driver.find_elements_by_xpath(xpath) image_url = None location = list() for element in elements: style = element.get_attribute("style") groups = link.search(style) url = groups[1] x_pos = groups[2] y_pos = groups[3] location.append((int(x_pos), int(y_pos))) image_url = url return image_url, location # 拼接图片 def mosaic_image(self, image_url, location): resq = requests.get(image_url) file = BytesIO(resq.content) img = Image.open(file) image_upper_lst = [] image_down_lst = [] for pos in location: if pos[1] == 0: # y值==0的图片属于上半部分,高度58 image_upper_lst.append(img.crop((abs(pos[0]), 0, abs(pos[0]) + 10, 58))) else: # y值==58的图片属于下半部分 image_down_lst.append(img.crop((abs(pos[0]), 58, abs(pos[0]) + 10, img.height))) x_offset = 0 # 创建一张画布,x_offset主要为新画布使用 new_img = Image.new("RGB", (260, img.height)) for img in image_upper_lst: new_img.paste(img, (x_offset, 58)) x_offset += img.width x_offset = 0 for img in image_down_lst: new_img.paste(img, (x_offset, 0)) x_offset += img.width return new_img # 判断颜色是否相近 def is_similar_color(self, x_pixel, y_pixel): for i, pixel in enumerate(x_pixel): if abs(y_pixel[i] - pixel) > 50: return False return True # 计算距离 def get_offset_distance(self, cut_image, full_image): for x in range(cut_image.width): for y in range(cut_image.height): cpx = cut_image.getpixel((x, y)) fpx = full_image.getpixel((x, y)) if not self.is_similar_color(cpx, fpx): img = cut_image.crop((x, y, x + 50, y + 40)) # 保存一下计算出来位置图片,看看是不是缺口部分 img.save("1.jpg") return x # 开始移动 def start_move(self, distance): element = self.driver.find_element_by_xpath('//div[@class="gt_slider_knob gt_show"]') # 这里就是根据移动进行调试,计算出来的位置不是百分百正确的,加上一点偏移 distance -= element.size.get('width') / 2 distance += 15 # 按下鼠标左键 ActionChains(self.driver).click_and_hold(element).perform() time.sleep(0.5) while distance > 0: if distance > 10: # 如果距离大于10,就让他移动快一点 span = random.randint(5, 8) else: # 快到缺口了,就移动慢一点 span = random.randint(2, 3) ActionChains(self.driver).move_by_offset(span, 0).perform() distance -= span time.sleep(random.randint(10,50)/100) ActionChains(self.driver).move_by_offset(distance, 1).perform() ActionChains(self.driver).release(on_element=element).perform() def register(self): element = self.driver.find_element_by_xpath('//input[@id="sms_username"]') element.clear() element.send_keys("手机号") ele_captcha = self.driver.find_element_by_xpath('//span[@class="js-btn-captcha btn-captcha"]') ele_captcha.click() if __name__ == "__main__": h = HuXiu() h.visit_index()

这个移动move_by_offset,我之前的y值也是随机的[-5,5],我觉得这个模拟会更真实一点,总会上下抖动的嘛,结果就是因为这个考虑的太人性了,识别率非常低,改了好多范围,更大的、更小的,结果最后不偏移,竟然识别率奇高。TMD考虑的太人性化了竟然识别不了,我也是醉了。最后再把执行效果发一下吧


如果你觉得我的文章还可以,可以关注我的微信公众号:Python爬虫实战之路
也可以扫描下面二维码,添加我的微信号
公众号

微信号


推荐阅读
  • 本文详细介绍了如何使用JavaScript实现面部交换功能,包括基本原理和具体实现步骤。 ... [详细]
  • 本文将详细介绍如何在佳明手表上选择和设置原有的或自定义的表盘,帮助用户轻松完成个性化设置。 ... [详细]
  • 本文详细介绍了 Oracle 数据库的自动备份机制及其安装步骤。通过具体示例,解释了系统变更号(SCN)和块结构在备份过程中的作用,以及热备份恢复的具体步骤。 ... [详细]
  • 本文详细介绍了如何在PHP中记录和管理行为日志,包括ThinkPHP框架中的日志记录方法、日志的用途、实现原理以及相关配置。 ... [详细]
  • 本文详细介绍了 HTML 中 a 标签的 href 属性的多种用法,包括实现超链接、锚点以及调用 JavaScript 方法。通过具体的示例和解释,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 专业人士如何做自媒体 ... [详细]
  • 使用jQuery实现图片分组切换的焦点图效果
    本文详细介绍了如何利用jQuery实现图片分组切换的焦点图效果,提供了在线演示和本地下载链接,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 表情符号密码:未来最安全的选择
    随着互联网生活的普及,如何设置一个安全的登录密码成为了一个重要问题。据英国一家安全软件开发公司的最新研究,表情符号将成为最安全的密码选择。 ... [详细]
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 本文详细介绍了 Python 中 thread 和 threading 模块的使用方法,并提供了丰富的示例和解释。文章首发于 HURUWO 的博客小站,本平台进行同步备份发布。如遇图片加载失败或有任何疑问,欢迎前往原博客留言。 ... [详细]
  • 本文详细介绍了从Windows 7 升级到 Windows 10 的步骤和注意事项,帮助用户顺利完成系统升级。 ... [详细]
  • 在 PyCharm 中设置背景图片的方法
    本文介绍了如何在 PyCharm 开发环境中添加背景图片,以提升编程环境的个性化体验。 ... [详细]
  • Ping 命令的高级用法与技巧
    本文详细介绍了 Ping 命令的各种高级用法和技巧,帮助读者更好地理解和利用这一强大的网络诊断工具。 ... [详细]
  • 利用python爬取豆瓣电影Top250的相关信息,包括电影详情链接,图片链接,影片中文名,影片外国名,评分,评价数,概况,导演,主演,年份,地区,类别这12项内容,然后将爬取的信息写入Exce ... [详细]
  • 瑜伽365应用全面使用指南与操作步骤详解
    瑜伽365是一款广受欢迎的瑜伽练习应用程序。本文将详细介绍其使用方法和操作步骤。首先,启动应用后,用户需进行注册,支持通过邮箱或手机号完成注册流程,系统会发送验证码以确保信息准确无误。随后,用户可以探索丰富的瑜伽课程和个性化设置,以满足不同水平和需求的练习者。此外,应用还提供了详细的练习指导和进度跟踪功能,帮助用户更好地掌握瑜伽技巧并持续进步。 ... [详细]
author-avatar
同亮uncle_847
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有