爬虫图像验证码的破解
最近发现一个比较有意思的网站,验证方法也很小众,记录一下
一开始我使用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)
模块认证