Python爬虫selenium验证-中文辨认点选+图片验证码案例

打印 上一主题 下一主题

主题 876|帖子 876|积分 2628

1.获取图片

  1. import re
  2. import time
  3. import ddddocr
  4. import requests
  5. from selenium import webdriver
  6. from selenium.webdriver.common.by import By
  7. from selenium.webdriver.chrome.service import Service
  8. from selenium.webdriver.support.wait import WebDriverWait
  9. from selenium.webdriver import ActionChains
  10. service = Service("driver/chromedriver.exe")
  11. driver = webdriver.Chrome(service=service)
  12. # 1.打开首页
  13. driver.get('https://www.geetest.com/adaptive-captcha-demo')
  14. # 2.点击【文字点选验证】
  15. tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(
  16.     By.XPATH,
  17.     '//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[4]'
  18. ))
  19. tag.click()
  20. # 3.点击开始验证
  21. tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(
  22.     By.CLASS_NAME,
  23.     'geetest_btn_click'
  24. ))
  25. tag.click()
  26. time.sleep(5)
  27. # 要识别的目标图片
  28. target_tag = driver.find_element(
  29.     By.CLASS_NAME,
  30.     'geetest_ques_back'
  31. )
  32. target_tag.screenshot("target.png")
  33. # 识别图片
  34. bg_tag = driver.find_element(
  35.     By.CLASS_NAME,
  36.     'geetest_bg'
  37. )
  38. bg_tag.screenshot("bg.png")
  39. time.sleep(2000)
  40. driver.close()
复制代码
2.目标辨认

截图每个字符,并基于ddddocr辨认。
  1. import re
  2. import time
  3. import ddddocr
  4. import requests
  5. from selenium import webdriver
  6. from selenium.webdriver.common.by import By
  7. from selenium.webdriver.chrome.service import Service
  8. from selenium.webdriver.support.wait import WebDriverWait
  9. from selenium.webdriver import ActionChains
  10. service = Service("driver/chromedriver.exe")
  11. driver = webdriver.Chrome(service=service)
  12. # 1.打开首页
  13. driver.get('https://www.geetest.com/adaptive-captcha-demo')
  14. # 2.点击【滑动拼图验证】
  15. tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(
  16.     By.XPATH,
  17.     '//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[4]'
  18. ))
  19. tag.click()
  20. # 3.点击开始验证
  21. tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(
  22.     By.CLASS_NAME,
  23.     'geetest_btn_click'
  24. ))
  25. tag.click()
  26. # 4.等待验证码出来
  27. time.sleep(5)
  28. # 5.识别任务图片
  29. target_word_list = []
  30. parent = driver.find_element(By.CLASS_NAME, 'geetest_ques_back')
  31. tag_list = parent.find_elements(By.TAG_NAME, "img")
  32. for tag in tag_list:
  33.     ocr = ddddocr.DdddOcr(show_ad=False)
  34.     word = ocr.classification(tag.screenshot_as_png)
  35.     target_word_list.append(word)
  36. print("要识别的文字:", target_word_list)
  37. time.sleep(2000)
  38. driver.close()
复制代码
3.背景坐标辨认

3.1 ddddocr

能辨认,但是发现默认辨认率有点低,想要提拔辨认率,可以搭建Pytorch情况对模型举行训练,参考:https://github.com/sml2h3/dddd_trainer
  1. import re
  2. import time
  3. import ddddocr
  4. import requests
  5. from selenium import webdriver
  6. from selenium.webdriver.common.by import By
  7. from selenium.webdriver.chrome.service import Service
  8. from selenium.webdriver.support.wait import WebDriverWait
  9. from selenium.webdriver import ActionChains
  10. from PIL import Image, ImageDraw
  11. from io import BytesIO
  12. service = Service("driver/chromedriver.exe")
  13. driver = webdriver.Chrome(service=service)
  14. # 1.打开首页
  15. driver.get('https://www.geetest.com/adaptive-captcha-demo')
  16. # 2.点击【滑动拼图验证】
  17. tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(
  18.     By.XPATH,
  19.     '//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[4]'
  20. ))
  21. tag.click()
  22. # 3.点击开始验证
  23. tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(
  24.     By.CLASS_NAME,
  25.     'geetest_btn_click'
  26. ))
  27. tag.click()
  28. # 4.等待验证码出来
  29. time.sleep(5)
  30. # 5.识别任务图片
  31. target_word_list = []
  32. parent = driver.find_element(By.CLASS_NAME, 'geetest_ques_back')
  33. tag_list = parent.find_elements(By.TAG_NAME, "img")
  34. for tag in tag_list:
  35.     ocr = ddddocr.DdddOcr(show_ad=False)
  36.     word = ocr.classification(tag.screenshot_as_png)
  37.     target_word_list.append(word)
  38. print("要识别的文字:", target_word_list)
  39. # 6.背景图片
  40. bg_tag = driver.find_element(
  41.     By.CLASS_NAME,
  42.     'geetest_bg'
  43. )
  44. content = bg_tag.screenshot_as_png
  45. # 7.识别背景中的所有文字并获取坐标
  46. ocr = ddddocr.DdddOcr(show_ad=False, det=True)
  47. poses = ocr.detection(content) # [(x1, y1, x2, y2), (x1, y1, x2, y2), x1, y1, x2, y2]
  48. # 8.循环坐标中的每个文字并识别
  49. bg_word_dict = {}
  50. img = Image.open(BytesIO(content))
  51. for box in poses:
  52.     x1, y1, x2, y2 = box
  53.     # 根据坐标获取每个文字的图片
  54.     corp = img.crop(box)
  55.     img_byte = BytesIO()
  56.     corp.save(img_byte, 'png')
  57.     # 识别文字
  58.     ocr2 = ddddocr.DdddOcr(show_ad=False)
  59.     word = ocr2.classification(img_byte.getvalue())  # 识别率低
  60.     # 获取每个字的坐标  {"鸭":}
  61.     bg_word_dict[word] = [int((x1 + x2) / 2), int((y1 + y2) / 2)]
  62. print(bg_word_dict)
  63. time.sleep(1000)
  64. driver.close()
复制代码
3.2 打码平台

https://www.chaojiying.com/
  1. import base64
  2. import requests
  3. from hashlib import md5
  4. file_bytes = open('5.jpg', 'rb').read()
  5. res = requests.post(
  6.     url='http://upload.chaojiying.net/Upload/Processing.php',
  7.     data={
  8.         'user': "deng",
  9.         'pass2': md5("密码".encode('utf-8')).hexdigest(),
  10.         'codetype': "9501",
  11.         'file_base64': base64.b64encode(file_bytes)
  12.     },
  13.     headers={
  14.         'Connection': 'Keep-Alive',
  15.         'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
  16.     }
  17. )
  18. res_dict = res.json()
  19. print(res_dict)
  20. # {'err_no': 0, 'err_str': 'OK', 'pic_id': '1234612060701120002', 'pic_str': '的,86,73|粉,111,38|菜,40,49|香,198,101', 'md5': 'faac71fc832b2ead01ffb4e813f3be60'}
复制代码
结合极验案例截图+辨认:
  1. import re
  2. import time
  3. import ddddocr
  4. import requests
  5. import base64
  6. import requests
  7. from hashlib import md5
  8. from selenium import webdriver
  9. from selenium.webdriver.common.by import By
  10. from selenium.webdriver.chrome.service import Service
  11. from selenium.webdriver.support.wait import WebDriverWait
  12. from selenium.webdriver import ActionChains
  13. from PIL import Image, ImageDraw
  14. from io import BytesIO
  15. service = Service("driver/chromedriver.exe")
  16. driver = webdriver.Chrome(service=service)
  17. # 1.打开首页
  18. driver.get('https://www.geetest.com/adaptive-captcha-demo')
  19. # 2.点击【滑动拼图验证】
  20. tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(
  21.     By.XPATH,
  22.     '//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[4]'
  23. ))
  24. tag.click()
  25. # 3.点击开始验证
  26. tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(
  27.     By.CLASS_NAME,
  28.     'geetest_btn_click'
  29. ))
  30. tag.click()
  31. # 4.等待验证码出来
  32. time.sleep(5)
  33. # 5.识别任务图片
  34. target_word_list = []
  35. parent = driver.find_element(By.CLASS_NAME, 'geetest_ques_back')
  36. tag_list = parent.find_elements(By.TAG_NAME, "img")
  37. for tag in tag_list:
  38.     ocr = ddddocr.DdddOcr(show_ad=False)
  39.     word = ocr.classification(tag.screenshot_as_png)
  40.     target_word_list.append(word)
  41. print("要识别的文字:", target_word_list)
  42. # 6.背景图片
  43. bg_tag = driver.find_element(
  44.     By.CLASS_NAME,
  45.     'geetest_bg'
  46. )
  47. content = bg_tag.screenshot_as_png
  48. bg_tag.screenshot("bg.png")
  49. # 7.识别背景中的所有文字并获取坐标
  50. res = requests.post(
  51.     url='http://upload.chaojiying.net/Upload/Processing.php',
  52.     data={
  53.         'user': "deng",
  54.         'pass2': md5("密码".encode('utf-8')).hexdigest(),
  55.         'codetype': "9501",
  56.         'file_base64': base64.b64encode(content)
  57.     },
  58.     headers={
  59.         'Connection': 'Keep-Alive',
  60.         'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
  61.     }
  62. )
  63. res_dict = res.json()
  64. print(res_dict)
  65. # 8.每个字的坐标  {"鸭":(196,85), ...}    target_word_list = ["花","鸭","字"]
  66. bg_word_dict = {}
  67. for item in res_dict["pic_str"].split("|"):
  68.     word, x, y = item.split(",")
  69.     bg_word_dict[word] = (x, y)
  70.    
  71. print(bg_word_dict)
  72. time.sleep(1000)
  73. driver.close()
复制代码
4.坐标点击

根据坐标,在验证码上举行点击。
  1. ActionChains(driver).move_to_element_with_offset(标签对象, xoffset=x, yoffset=y).click().perform()
复制代码
  1. import re
  2. import time
  3. import ddddocr
  4. import requests
  5. import base64
  6. import requests
  7. from hashlib import md5
  8. from selenium import webdriver
  9. from selenium.webdriver.common.by import By
  10. from selenium.webdriver.chrome.service import Service
  11. from selenium.webdriver.support.wait import WebDriverWait
  12. from selenium.webdriver import ActionChains
  13. from PIL import Image, ImageDraw
  14. from io import BytesIO
  15. service = Service("driver/chromedriver.exe")
  16. driver = webdriver.Chrome(service=service)
  17. # 1.打开首页
  18. driver.get('https://www.geetest.com/adaptive-captcha-demo')
  19. # 2.点击【滑动拼图验证】
  20. tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(
  21.     By.XPATH,
  22.     '//*[@id="gt-showZh-mobile"]/div/section/div/div[2]/div[1]/div[2]/div[3]/div[4]'
  23. ))
  24. tag.click()
  25. # 3.点击开始验证
  26. tag = WebDriverWait(driver, 30, 0.5).until(lambda dv: dv.find_element(
  27.     By.CLASS_NAME,
  28.     'geetest_btn_click'
  29. ))
  30. tag.click()
  31. # 4.等待验证码出来
  32. time.sleep(5)
  33. # 5.识别任务图片
  34. target_word_list = []
  35. parent = driver.find_element(By.CLASS_NAME, 'geetest_ques_back')
  36. tag_list = parent.find_elements(By.TAG_NAME, "img")
  37. for tag in tag_list:
  38.     ocr = ddddocr.DdddOcr(show_ad=False)
  39.     word = ocr.classification(tag.screenshot_as_png)
  40.     target_word_list.append(word)
  41. print("要识别的文字:", target_word_list)
  42. # 6.背景图片
  43. bg_tag = driver.find_element(
  44.     By.CLASS_NAME,
  45.     'geetest_bg'
  46. )
  47. content = bg_tag.screenshot_as_png
  48. # bg_tag.screenshot("bg.png")
  49. # 7.识别背景中的所有文字并获取坐标
  50. res = requests.post(
  51.     url='http://upload.chaojiying.net/Upload/Processing.php',
  52.     data={
  53.         'user': "deng",
  54.         'pass2': md5("自己密码".encode('utf-8')).hexdigest(),
  55.         'codetype': "9501",
  56.         'file_base64': base64.b64encode(content)
  57.     },
  58.     headers={
  59.         'Connection': 'Keep-Alive',
  60.         'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',
  61.     }
  62. )
  63. res_dict = res.json()
  64. bg_word_dict = {}
  65. for item in res_dict["pic_str"].split("|"):
  66.     word, x, y = item.split(",")
  67.     bg_word_dict[word] = (x, y)
  68. print(bg_word_dict)
  69. # target_word_list = ['粉', '菜', '香']
  70. # bg_word_dict = {'粉': ('10', '10'), '菜': ('50', '50'), '香': ('100', '93')}
  71. # 8.点击
  72. for word in target_word_list:
  73.     time.sleep(2)
  74.     group = bg_word_dict.get(word)
  75.     if not group:
  76.         continue
  77.     x, y = group
  78.     x = int(x) - int(bg_tag.size['width'] / 2)
  79.     y = int(y) - int(bg_tag.size['height'] / 2)
  80.     ActionChains(driver).move_to_element_with_offset(bg_tag, xoffset=x, yoffset=y).click().perform()
  81. time.sleep(1000)
  82. driver.close()
复制代码
5.图片验证码

在许多登录、注册、频仍操作等行为时,一般都会加入验证码的功能。
如果想要基于代码实现某些功能,就必须实现:主动辨认验证码,然后再做其他功能。
6.辨认

基于Python的模块 ddddocr 可以实现对图片验证码的辨认。
  1. pip3.11 install ddddocr==1.4.9  -i https://mirrors.aliyun.com/pypi/simple/
  2. pip3.11 install Pillow==9.5.0
复制代码
  1. pip install ddddocr==1.4.9  -i https://mirrors.aliyun.com/pypi/simple/
  2. pip install Pillow==9.5.0
复制代码
6.1 本地辨认

  1. import ddddocr
  2. ocr = ddddocr.DdddOcr(show_ad=False)
  3. with open("img/v1.jpg", mode='rb') as f:
  4.     body = f.read()
  5. code = ocr.classification(body)
  6. print(code)
复制代码
6.2 在线辨认

也可以直接哀求获取图片,然后直接辨认:
  1. import ddddocr
  2. import requests
  3. res = requests.get(url="https://console.zbox.filez.com/captcha/create/reg?_t=1701511836608")
  4. ocr = ddddocr.DdddOcr(show_ad=False)
  5. code = ocr.classification(res.content)
  6. print(code)
复制代码
  1. import ddddocr
  2. import requests
  3. res = requests.get(
  4.     url=f"https://api.ruanwen.la/api/auth/captcha?captcha_token=n5A6VXIsMiI4MTKoco0VigkZbByJbDahhRHGNJmS"
  5. )
  6. ocr = ddddocr.DdddOcr(show_ad=False)
  7. code = ocr.classification(res.content)
  8. print(code)
复制代码
6.3 base64

有些平台的图片是以base64编码情势存在,需要处置处罚下在辨认。
  1. import base64
  2. import ddddocr
  3. content = base64.b64decode("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")
  4. # with open('x.png', mode='wb') as f:
  5. #     f.write(content)
  6. ocr = ddddocr.DdddOcr(show_ad=False)
  7. code = ocr.classification(content)
  8. print(code)
复制代码
7.案例:x文街

https://i.ruanwen.la/
  1. import requests
  2. import ddddocr
  3. # 获得图片验证码地址
  4. res = requests.post(url="https://api.ruanwen.la/api/auth/captcha/generate")
  5. res_dict = res.json()
  6. captcha_token = res_dict['data']['captcha_token']
  7. captcha_url = res_dict['data']['src']
  8. # 访问并获取图片验证码
  9. res = requests.get(captcha_url)
  10. # 识别验证码
  11. ocr = ddddocr.DdddOcr(show_ad=False)
  12. code = ocr.classification(res.content)
  13. print(code)
  14. # 登录认证
  15. res = requests.post(
  16.     url="https://api.ruanwen.la/api/auth/authenticate",
  17.     json={
  18.         "mobile": "手机号",
  19.         "device": "pc",
  20.         "password": "密码",
  21.         "captcha_token": captcha_token,
  22.         "captcha": code,
  23.         "identity": "advertiser"
  24.     }
  25. )
  26. print(res.json())
  27. # {'success': True, 'message': '验证成功', 'data': {'token': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwaS5ydWFud2VuLmxhL2FwaS9hdXRoL2F1dGhlbnRpY2F0ZSIsImlhdCI6MTcwMTY1MzI2NywiZXhwIjoxNzA1MjUzMjY3LCJuYmYiOjE3MDE2NTMyNjcsImp0aSI6IjQ3bk05ejZyQ0JLV28wOEQiLCJzdWIiOjUzMzEyNTgsInBydiI6IjQxZGY4ODM0ZjFiOThmNzBlZmE2MGFhZWRlZjQyMzQxMzcwMDY5MGMifQ.XxFYMEot-DfjTUcuVuoCjcBqu3djvzJiTeJERaR95co'}, 'status': 200}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

海哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表