当前位置:   article > 正文

Python实现滑块验证码识别,最简单的一种,没有任何加密_python滑块验证码

python滑块验证码

网址链接:衣丰 & 2010-聚衣网(juyi5.cn) - 常熟市聚衣网,聚衣网女装,江苏省女装批发,苏州市女装批发,常熟市女装批发,网销女装一件代发,全国最低价

平时采集数据,频率过快,出现反爬:

        IP/账号/验证码/

需要登陆才能看到手机号何微信号

打开开发者工具,刷新后点击显示电话,可以发现包,里面有数据

获取数据的包的链接:https://www.juyi5.cn/ajax/supplier/get_contact_info

获取数据包需要的参数:

user_id:是不同商家的标志 

auth_key:是下面获取验证码链接传来的key值

auth_token:是识别验证码链接返回的值

 

多次刷新,会出现验证码

 

如何自动识别验证码:

1.抓包分析过程

        -出现验证码链接:

               get: https://captcha.jybc.com.cn/api/captcha/get?type=2&site=juyi5&_=1712671270045 

               数据包中

                -img:滑块图片

                -key:会用到check包中的载荷中

                -slider:完整有缺口图片

        -识别验证码链接:

                post:https://captcha.jybc.com.cn/api/captcha/check(识别操作)

                载荷中

                -key:从验证码链接返回的参数中获得

                -type:2(固定)验证码类型

                -value:74(滑动的距离)

                

 

第一个data包是滑块,第二个data包是验证码图,故意滑动错误,出现check包

现在目标明确,为了通过验证码,必须获得key值和value值,value值可以获得验证码图片,经过第三方库获得。

具体代码:

  1. import base64
  2. import requests
  3. import ddddocr #验证码识别
  4. # 验证码链接
  5. url = 'https://captcha.jybc.com.cn/api/captcha/get?type=2&site=juyi5&_=1712671270046'
  6. headers = {
  7. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
  8. }
  9. response = requests.get(url=url,headers=headers)
  10. json_data = response.json()
  11. img = json_data['data']['img'].split(',')[-1]#滑块图片base64值
  12. slider = json_data['data']['slider'].split(',')[-1]# 有缺口图片base64值
  13. key = json_data['data']['key'] # key值
  14. yzm = base64.b64decode(img) # 获取滑块图片二进制数据
  15. yzm_ = base64.b64decode(slider) #获取有缺口图片二进制数据
  16. '''识别缺口位置'''
  17. det = ddddocr.DdddOcr(det=False,ocr=False)
  18. res = det.slide_match(yzm,yzm_,simple_target=True) # 返回的第一个是value值
  19. value = res['target'][0]
  20. '''验证识别'''
  21. link = 'https://captcha.jybc.com.cn/api/captcha/check'
  22. data = {
  23. 'key': key,
  24. 'type': '2',
  25. 'value': value,
  26. }
  27. post_data = requests.post(url=link,data=data,headers=headers).json()
  28. print(res)
  29. print(post_data)

 结果展现:

返回一个token值,获取数据时可以传进去。 

现在获得了所有数据包需要的参数,那么进行数据采集吧!

完整代码:

  1. import base64
  2. import requests
  3. import ddddocr #验证码识别
  4. # 验证码链接
  5. url = 'https://captcha.jybc.com.cn/api/captcha/get?type=2&site=juyi5&_=1712671270046'
  6. headers = {
  7. "Cookie":"UM_distinctid=18ec3225db1698-07895aa196f7bf-26001951-144000-18ec3225db2a0b; CNZZDATA1281257008=1962599005-1712670793-%7C1712670837; login_captcha_word=81065f8c25a8c7a1e3dc118575253916; login_captcha_time=1712670843715; login_captcha_image=%3Cimg+id%3D%22captcha%22+src%3D%22%2Fimages%2Fcaptcha%2F1712670843715.png%22+width%3D%2280%22+height%3D%2230%22+style%3D%22border%3A0%3B%22+%2F%3E; login_captcha_hash=759ec17249f7036e06e84123913624fd; user_phash=c71f3ad136b089ae6595129d9f1a3d34; daily_login=1; user_username=18720180853%40juyi5.cn; user_user_id=3698246; user_type=0; user_login_type=passport; user_login_time=2024-04-09+21%3A55%3A02; user_login_ip=36.248.235.8; user_is_user_login=1; user_hash=fcef63a4b7469334801fd1e6ba7566cb; k3cn=dXNlcl9pZD0zNjk4MjQ2JnR5cGU9MCZ1c2VybmFtZT0xODcyMDE4MDg1M0BqdXlpNS5jbiZ0PTE3MTI2NzA5MDImaGFzaD0yODc5MWVhOTQ2M2Q0MjYwMjk1ZDFkZWJiMzFhY2U5Yg%3D%3D; CNZZDATA1281257007=967069251-1712670902-%7C1712671271; CNZZDATA1278289041=1554277160-1712670793-%7C1712671271",
  8. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
  9. }
  10. response = requests.get(url=url,headers=headers)
  11. json_data = response.json()
  12. img = json_data['data']['img'].split(',')[-1]#滑块图片base64值
  13. slider = json_data['data']['slider'].split(',')[-1]# 有缺口图片base64值
  14. key = json_data['data']['key'] # key值
  15. yzm = base64.b64decode(img) # 获取滑块图片二进制数据
  16. yzm_ = base64.b64decode(slider) #获取有缺口图片二进制数据
  17. '''识别缺口位置'''
  18. det = ddddocr.DdddOcr(det=False,ocr=False)
  19. res = det.slide_match(yzm,yzm_,simple_target=True) # 返回的第一个是value值
  20. value = res['target'][0]
  21. '''验证识别'''
  22. link = 'https://captcha.jybc.com.cn/api/captcha/check'
  23. data = {
  24. 'key': key,
  25. 'type': '2',
  26. 'value': value,
  27. }
  28. post_data = requests.post(url=link,data=data,headers=headers).json()
  29. print(res)
  30. print(post_data)
  31. '''请求数据链接'''
  32. data_url = 'https://www.juyi5.cn/ajax/supplier/get_contact_info'
  33. data2 = {
  34. 'user_id': '3424211',
  35. 'auth_key': key,
  36. 'auth_token': post_data['data']['token'],
  37. }
  38. res2 = requests.post(url=data_url,data=data2,headers=headers).json() #由于是登录才能获取数据,因此headers中还要加上cookie
  39. print(res2)
  40. print(res2['data'])

结果展现: 

 

 

 

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

闽ICP备14008679号