python爬虫-破解验证码(封装超级鹰实现)

本是古典 何须时尚 2021-09-07 06:15 768阅读 0赞

进入超级鹰首页,根据官方提示进行操作,下载python的文档后,把其封装进自己的第三方库中
在这里插入图片描述
官方原文档:

  1. #!/usr/bin/env python
  2. # coding:utf-8
  3. import requests
  4. from hashlib import md5
  5. class Chaojiying_Client(object):
  6. def __init__(self, username, password, soft_id):
  7. self.username = username
  8. password = password.encode('utf8')
  9. self.password = md5(password).hexdigest()
  10. self.soft_id = soft_id
  11. self.base_params = {
  12. 'user': self.username,
  13. 'pass2': self.password,
  14. 'softid': self.soft_id,
  15. }
  16. self.headers = {
  17. 'Connection': 'Keep-Alive',
  18. 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
  19. }
  20. def PostPic(self, im, codetype):
  21. """ im: 图片字节 codetype: 题目类型 参考 http://www.chaojiying.com/price.html """
  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, headers=self.headers)
  28. return r.json()
  29. def ReportError(self, im_id):
  30. """ im_id:报错题目的图片ID """
  31. params = {
  32. 'id': im_id,
  33. }
  34. params.update(self.base_params)
  35. r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
  36. return r.json()
  37. if __name__ == '__main__':
  38. chaojiying = Chaojiying_Client('超级鹰用户名', '超级鹰用户名的密码', '96001') #用户中心>>软件ID 生成一个替换 96001
  39. im = open('a.jpg', 'rb').read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
  40. print chaojiying.PostPic(im, 1902) #1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加()

封装后文档(我是把他封装入我的第三方库yh)

  1. #!/usr/bin/env python
  2. # coding:utf-8
  3. import requests
  4. from hashlib import md5
  5. class Chaojiying_Client(object):
  6. def __init__(self, username, password, soft_id):
  7. self.username = username
  8. password = password.encode('utf8')
  9. self.password = md5(password).hexdigest()
  10. self.soft_id = soft_id
  11. self.base_params = {
  12. 'user': self.username,
  13. 'pass2': self.password,
  14. 'softid': self.soft_id,
  15. }
  16. self.headers = {
  17. 'Connection': 'Keep-Alive',
  18. 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
  19. }
  20. def PostPic(self, im, codetype):
  21. """ im: 图片字节 codetype: 题目类型 参考 http://www.chaojiying.com/price.html """
  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, headers=self.headers)
  28. return r.json()
  29. def ReportError(self, im_id):
  30. """ im_id:报错题目的图片ID """
  31. params = {
  32. 'id': im_id,
  33. }
  34. params.update(self.base_params)
  35. r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)
  36. return r.json()
  37. # 在这里调用的时候把相应的信息放进去(账号密码软件id,就不用重复的放了)
  38. # 留两个参数使其调用更加灵活
  39. # code_path是验证码的图片的路径
  40. # code_type是验证码的类型
  41. def get_code(code_path, code_type):
  42. chaojiying = Chaojiying_Client('超级鹰用户名', '超级鹰用户名的密码', '96001') #用户中心>>软件ID 生成一个替换 96001
  43. im = open(code_path, 'rb').read() #本地图片文件路径 来替换 a.jpg 有时WIN系统须要//
  44. return chaojiying.PostPic(im, code_type) #1902 验证码类型 官方网站>>价格体系 3.4+版 print 后要加())

把这些代码放进自己的库中,或者直接把这个文件保存放在全局变量的路径下,我这里是直接放在python的自带模板库的根目录下,这样就可以实现调用

在这里插入图片描述下面以破解超级鹰登录页面的验证码为例

  1. import yh # 引入个人的库
  2. from lxml import etree # 解析数据
  3. import requests # 发送请求
  4. url = 'http://www.chaojiying.com/user/login/' # 随便找一个有验证码的页面就行了,只是用于实验
  5. headers = {
  6. 'User-Agent':
  7. 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0',
  8. } # UA伪装
  9. page = requests.get(url=url, headers=headers).text # 获取文本格式的响应
  10. tree = etree.HTML(page) # 解析数据
  11. # 这里的xpath路径可以直接点开F12后,复制粘贴
  12. code_img_src = 'http://www.chaojiying.com' + tree.xpath('/html/body/div[3]/div/div[3]/div[1]/form/div/img/@src')[
  13. 0] # 取到图片的链接
  14. print(code_img_src) # 打印图片链接
  15. code_img_data = requests.get(url=code_img_src, headers=headers).content # 下载图片,以二进制形式
  16. with open('./code.jpg', 'wb') as fp:
  17. fp.write(code_img_data) # 存图片
  18. code = yh.get_code('./code.jpg', '1004') # 调用第三方库里面的函数进行解析
  19. print(code) # 打印实验结果

实验结果
在这里插入图片描述

{‘err_no’: 0, ‘err_str’: ‘OK’, ‘pic_id’: ‘9134016265782900038’, ‘pic_str’: ‘MSDX’, ‘md5’: ‘fda3f65efc662d190921d8a87251b040’}

此文讲了如何破解验证码,后面会写一篇seleium运用破解的验证码实现无头浏览器自动化登录的博文。

发表评论

表情:
评论列表 (有 0 条评论,768人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java爬虫破解滑块验证

    > 使用技术:java+Selenium > > 废话: > > 有爬虫,自然就有反爬虫,就像病毒和杀毒软件一样,有攻就有防,两者彼此推进发展。而目前最流行的反爬技术验证码

    相关 破解滑动验证

    一、介绍 一些网站会在正常的账号密码认证之外加一些验证码,以此来明确地区分人/机行为,从一定程度上达到反爬的效果,对于简单的校验码Tesserocr就可以搞定,如下 !