当前位置:   article > 正文

【Python爬虫】 验证码图像识别 --- 第二弹 (点触验证码识别和打码平台介绍)_爬虫点触验证 opencv

爬虫点触验证 opencv

 

上一次 介绍的是 ORC 技术 对 图片进行识别 ,  不过 识别率 并不是很理想, 接下来 在这里介绍 几个 自己觉得好用的打码平台供  大家参考

 

一丶baidu-aip: 通用文字识别

 

官网有教程:

接入指南:    https://ai.baidu.com/docs#/Begin/top

 

Python sdk 文档:  http://ai.baidu.com/docs#/OCR-Python-SDK/07883957

 

  1. from aip import AipOcr
  2. from PIL import Image
  3. """ 你的 APPID AK SK """
  4. APP_ID = '11673820'
  5. API_KEY = '8kEGtNlLBCDz6iYGeuNFgGBG'
  6. SECRET_KEY = 'tgP0bkUFWtRkDvy7VQ0dKz9tCdqDKj8u '
  7. client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
  8. """ 读取图片 """
  9. def get_file_content(filePath):
  10. with open(filePath, 'rb') as fp:
  11. return fp.read()
  12. # 先将图像进行处理
  13. image =Image.open('captha111.jpg')
  14. # 灰度处理
  15. # image = image.convert('L')
  16. # 二值化处理
  17. image = image.convert('1')
  18. image.save('aa.jpg')
  19. image = get_file_content('aa.jpg')
  20. # """ 调用通用文字识别, 图片参数为本地图片 """
  21. result = client.basicGeneral(image)
  22. print(result)
  23. # """ 如果有可选参数 """
  24. # options = {}
  25. # options["language_type"] = "ENG"
  26. # options["detect_direction"] = "true"
  27. # options["detect_language"] = "true"
  28. # options["probability"] = "true"
  29. # """ 带参数调用通用文字识别(高精度版) """
  30. # result = client.basicGeneral(image, options)
  31. # print(result)
  32. for word in result['words_result']:
  33. print(word['words'])

 

 

二 丶 云打码平台

 

必要文件 ( 云打码平台 会给出几个 源文件 下载相对于的版本下来即可,  有教如何使用 ):

              

                

 

以 古诗文网 为例:                  

  1. import requests
  2. sessions = requests.session()
  3. headers = {
  4. 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36',
  5. }
  6. # 获取验证码的url
  7. response1 = sessions.get('https://so.gushiwen.org/RandCode.ashx',headers=headers)
  8. # 二进制保存图片
  9. with open('yanzhengma.png','wb')as fp:
  10. fp.write(response1.content)
  11. # 分析验证码
  12. from Shibie import Recoginitier
  13. file_path = 'yanzhengma.png'
  14. s = Recoginitier()
  15. value = s.esay_recoginition(file_path)
  16. value = str(value).split("'")[1]
  17. print(value)
  18. data = {
  19. ('email', '账号'),
  20. ('pwd', '密码'),
  21. ('code', value),
  22. }
  23. # 获取用户收藏页详情
  24. response3 = sessions.post('https://so.gushiwen.org/user/login.aspx?from=http%3a%2f%2fso.gushiwen.org%2fuser%2fcollect.aspx', headers=headers, params=data)
  25. with open('bmx.html','w',encoding='utf-8')as fp:
  26. fp.write(response3.text)
  27. print(response3.status_code)

 

三  丶  超级鹰 :

此平台 需要 花钱购买题分 ,  不一样的验证码破解  所花的 题分 价格也不一样  ,  官网也有 教学文档  : 

这里就不详细的介绍了 ,  直接 给出一个 成功的 实例 :

下载下来的 API  是 2.x 版本的  需要手动修改成3.x版本的即可:

第一个代码块是: 下载的API

第二个代码块是: 以简书为例的一个完整工程

  1. import requests
  2. from hashlib import md5
  3. class Chaojiying(object):
  4. def __init__(self, username, password, soft_id):
  5. self.username = username
  6. self.password = md5(password.encode('utf-8')).hexdigest()
  7. self.soft_id = soft_id
  8. self.base_params = {
  9. 'user': self.username,
  10. 'pass2': self.password,
  11. 'softid': self.soft_id,
  12. }
  13. self.headers = {
  14. 'Connection': 'Keep-Alive',
  15. 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
  16. }
  17. def post_pic(self, im, codetype):
  18. """
  19. im: 图片字节
  20. codetype: 题目类型 参考 http://www.chaojiying.com/price.html
  21. """
  22. params = {
  23. 'codetype': codetype,
  24. }
  25. params.update(self.base_params)
  26. files = {'userfile': ('ccc.jpg', im)}
  27. r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files,
  28. headers=self.headers)
  29. return r.json()
  30. # 验证不通过,请求该函数 , 后台 则对该次判断不做扣分处理
  31. def report_error(self, im_id):
  32. """
  33. im_id:报错题目的图片ID
  34. """
  35. params = {
  36. 'id': im_id,
  37. }
  38. params.update(self.base_params)
  39. r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
  40. return r.json()
  41. '''
  42. 下面代码 用于检测 验证码
  43. '''
  44. # if __name__ == '__main__':
  45. #
  46. #
  47. # cjy = Chaojiying('账号', '密码', '软件ID')
  48. # im = open('captcha.jpg', 'rb').read()
  49. # content = cjy.post_pic(im, 验证码类型)
  50. # yanzhengma = ''
  51. # for key,value in content.items():
  52. # if key == 'pic_str':
  53. # yanzhengma = value
  54. # print(yanzhengma)
  1. import time
  2. from PIL import Image
  3. from selenium import webdriver
  4. from selenium.webdriver import ActionChains
  5. from 点触验证码的识别.chaojiying import Chaojiying
  6. def crack():
  7. # 保存网页截图
  8. browser.save_screenshot('222.jpg')
  9. # 获取 验证码确定按钮
  10. button = browser.find_element_by_xpath(xpath='//div[@class="geetest_panel"]/a/div')
  11. # 获取 验证码图片的 位置信息
  12. img1 = browser.find_element_by_xpath(xpath='//div[@class="geetest_widget"]')
  13. location = img1.location
  14. size = img1.size
  15. top, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size[
  16. 'width']
  17. print('图片的宽:', img1.size['width'])
  18. print(top, bottom, left, right)
  19. # 根据获取的验证码位置信息和网页图片 对验证码图片进行裁剪 保存
  20. img_1 = Image.open('222.jpg')
  21. capcha1 = img_1.crop((left, top, right, bottom-54))
  22. capcha1.save('tu1-1.png')
  23. # 接入超级鹰 API 获取图片中的一些参数 (返回的是一个字典)
  24. cjy = Chaojiying('账号', '密码', '软件ID')
  25. im = open('tu1-1.png', 'rb').read()
  26. content = cjy.post_pic(im, 验证码类型)
  27. print(content)
  28. # 将图片中汉字的坐标位置 提取出来
  29. positions = content.get('pic_str').split('|')
  30. locations = [[int(number)for number in group.split(",")] for group in positions]
  31. print(positions)
  32. print(locations)
  33. # 根据获取的坐标信息 模仿鼠标点击验证码图片
  34. for location1 in locations:
  35. print(location1)
  36. ActionChains(browser).move_to_element_with_offset(img1 , location1[0],location1[1]).click().perform()
  37. time.sleep(1)
  38. button.click()
  39. time.sleep(1)
  40. # 失败后重试
  41. lower = browser.find_element_by_xpath('//div[@class="geetest_table_box"]/div[2]').text
  42. print('判断', lower)
  43. if lower != '验证失败 请按提示重新操作'and lower != None:
  44. print('登录成功')
  45. time.sleep(3)
  46. else:
  47. time.sleep(3)
  48. print('登录失败')
  49. # 登录失败后 , 调用 该函数 , 后台 则对该次判断不做扣分处理
  50. pic_id = content.get('pic_id')
  51. print('图片id为:',pic_id)
  52. cjy = Chaojiying('账号', '密码', '软件ID')
  53. cjy.report_error(pic_id)
  54. crack()
  55. if __name__ == '__main__':
  56. patn = 'chromedriver.exe'
  57. browser = webdriver.Chrome(patn)
  58. browser.get('https://www.jianshu.com/sign_in')
  59. browser.save_screenshot('lodin.png')
  60. # 填写from表单 点击登陆 获取验证码 的网页截图
  61. login = browser.find_element_by_id('sign-in-form-submit-btn')
  62. username = browser.find_element_by_id('session_email_or_mobile_number')
  63. password = browser.find_element_by_id('session_password')
  64. username.send_keys('账号')
  65. password.send_keys('密码')
  66. login.click()
  67. time.sleep(5)
  68. crack()

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/287327
推荐阅读
相关标签
  

闽ICP备14008679号