# 点击文字验证码处理 **Repository Path**: pengchen123/detail_verify ## Basic Information - **Project Name**: 点击文字验证码处理 - **Description**: 碰到点选文字验证码 如何使用打码平台之图片合并(一) - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-06-01 - **Last Updated**: 2024-06-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 碰到点选文字验证码 如何使用打码平台之图片合并(一) ## 前景 ​ 目前很多网站都在用反爬手段滑块呀点选呀文字识别呀啥啥的,就是为了区分是机器还是人为,上一篇讲的是分布式如此频繁的访问人家网站,突然出现个验证码,我们就 拿不到数据了,机器就一直报错,所以我们总不能坐在电脑前等着验证码出现 ,然后点击、确定那多累,而且在手动点击的时候程序还在运行,数据漏掉的就有很多。 ## 解决方式 ​ 1.使用机器学习的技术,来训练这些出现的验证码图片,我找了AI同事 看看他有没有什么办法,AI同事说需要很多很多图片,我说存了有一万多张,他说这还远远不够,主要还需要标注出来。 ​ 当然我也不懂机器学习,不会训练模型啥的,所以这个路暂时行不通了 ​ 2.他暂时不帮咱忙,为了完成任务,自然要找别的路,然后就找到了超级鹰这样的打码平台 。 ## 流程 ​ 在使用打码平台的时候,我们是需要给打码平台一张验证码图片,打码平台返回一个需要点击文字的坐标,我们根据这个坐标在代码程序中进行点击的这样一个过程,我们这一节主要讲一下这个验证码图片怎么解决 ### 解决方法 ​ 1.使用selenium,进行页面截图,在程序运行时是需要启动浏览器的,还要再下载一个叫chromedriver.exe的可执行文件,运行起来比较重 ​ 2.网站使用这种验证码是使用两张图片,一个图片是模板 一个是提示要点击哪些文字的图片做为点击参考,存储为json格式,我们只要有了这个json,将两张图片合并成一张就可以提交给打码平台了,相比 运行起来轻多了 ​ 第一张 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0102/202024_69d743c3_5587202.jpeg "3ba072ba392ba9fc55b9c2b1630e5c55.jpg") ​ 第二张 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0102/202039_b496c9e9_5587202.jpeg "7aa2c61be3b3354c561c0071c2953f32.jpg") ​ 结果 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0102/202049_b5731d24_5587202.jpeg "result.jpg") ## 代码流程 ```python import os from PIL import Image i1 = 'img/'+ os.listdir('img')[0] i2 = 'img/'+ os.listdir('img')[1] base_img = Image.open(i1, 'r') bg_img = Image.open(i2, 'r') print (base_img.size, base_img.mode) print (bg_img.size, bg_img.mode) # 创建空白长图 result = Image.new('RGB', (320,130)) # 拼接图片 (0, 0), (base_img.width, base_img.height) 起始点的横坐标,起始点的纵坐标 result.paste(base_img, (0, 0, base_img.width, base_img.height)) result.paste(bg_img, (0, base_img.height, bg_img.width, base_img.height + bg_img.height)) # #查看图片 # result.show() # 保存图片 result.save('img/result.jpg') ``` ### 另外还有这样一种情况 ![输入图片说明](https://images.gitee.com/uploads/images/2020/0102/202115_cc2d042e_5587202.png "按文字点选.png") 我本以为这种情况和上面的操作是一样的,然后我打开0和1这两个 图片一看是一样的,所以图片合并后,打码平台是没有参考依据的,但是下面有front这个东西,我们是根据这个来点击的,但是我们没办法给打码平台发送文字,所以我们需要将这三个字生成一张图片。 ```python from PIL import Image,ImageDraw,ImageFont import os text='嘉 卧 秋' im = Image.new("RGB", (320, 30), (255, 255, 255)) dr = ImageDraw.Draw(im) font = ImageFont.truetype(os.path.join("fonts", "simsun.ttc"), 20) dr.text((130,8), text, font=font, fill="#000000") im.save("wangyi/words.jpg") ``` ![输入图片说明](https://images.gitee.com/uploads/images/2020/0102/202140_dee62cc5_5587202.jpeg "words.jpg") ok , 然后我们再使用上面的方法合并一下: ![输入图片说明](https://images.gitee.com/uploads/images/2020/0102/202153_f0e0f88a_5587202.jpeg "result.jpg")