图像验证码的破解 cv2+selenium

爬虫图像验证码的破解

最近发现一个比较有意思的网站,验证方法也很小众,记录一下

一开始我使用pyppeteer工具,可是这个异步的没办法调试,网上资料太少所以改成了sessnium
需要验证在这里插入图片描述
验证思路:
第一种: 一开始使用了第三方打码平台,但是结果不能认认证,本来以为会返回响应坐标点的。
第二种:会发现图像中圆点三角部分会有高亮部分,所以选用cv2进行像素处理,显示高亮部分,就可以识别了
在这里插入图片描述
但是问题来了,这种是很难识别出图形的因为有很多不同的背景图片
换个图片
在这里插入图片描述
这种就无法很直观的找到了
第三种: cv2 直接模型匹配,总体成功率较高
在这里插入图片描述
代码部分
找到坐标

    def find_px(self, path_img):
        '''
        识别验证码坐标
        :param path_img:
        :return:
        '''
        target = cv2.imread("./yanzhengma.png")
        template = cv2.imread("./img/%s.jpg" % (path_img))
        result = cv2.matchTemplate(target, template, cv2.TM_SQDIFF_NORMED)
        min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
        return min_loc[0] + 10, min_loc[1] + 10

这里图像坐标是以左上角开始的,右下角为正向坐标
模拟点击
selenium中有模拟鼠标点击的模块ActionChains

    def move_mouse(self, name):
        # 拖动鼠标模拟点击
        x, y = self.find_px(name)
        write = self.browser.find_element_by_xpath('//span[@class="lc-button lc-refresh"]')
        action = ActionChains(self.browser)
        sleep(1)
        action.move_to_element(write).move_by_offset(-(265 - x), -(170 - y)).click().perform()

这里的265 和 170是以
在这里插入图片描述
为坐标计算出来的
这里还要注意源码里有两个iframe模块测试是否验证登录成功就需要切换iframe
当然后期还有要跳转的网页
完整代码github(https://github.com/PlanWMan/leopard/tree/wnlib)

模块认证

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值