一 简介

直接点击图中符合要求的图。所有的答案都正确,验证才会成功,如果有一个答案错误,验证就会失败。

二 目标

用程序来识别并通过点触验证码的验证。

三 了解点触验证码

12306官网的验证码样式:

四 超级鹰注册账号

https://www.chaojiying.com/user/reg

注册用户:cakin24

验证码类型参考:https://www.chaojiying.com/price.html

五 代码

1 Chaojiying.py

import requests
from hashlib import md5class Chaojiying(object):def __init__(self, username, password, soft_id):self.username = usernameself.password = md5(password.encode('utf-8')).hexdigest()self.soft_id = soft_idself.base_params = {'user': self.username,'pass2': self.password,'softid': self.soft_id,}self.headers = {'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}def post_pic(self, im, codetype):"""im: 图片字节codetype: 题目类型 参考 http://www.chaojiying.com/price.html"""params = {'codetype': codetype,}params.update(self.base_params)files = {'userfile': ('ccc.jpg', im)}r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files,headers=self.headers)return r.json()def report_error(self, im_id):"""im_id:报错题目的图片ID"""params = {'id': im_id,}params.update(self.base_params)r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)return r.json()

2 8_3.py

import time
from io import BytesIO
from PIL import Image
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from chaojiying import Chaojiying# http://admin.touclick.com/login.html的邮箱
EMAIL = '798103175@qq.com'
# http://admin.touclick.com/login.html的密码
PASSWORD = ''CHAOJIYING_USERNAME = 'cakin24'
CHAOJIYING_PASSWORD = ''
CHAOJIYING_SOFT_ID = 898551
CHAOJIYING_KIND = 9102class CrackTouClick():def __init__(self):self.url = 'http://admin.touclick.com/login.html'self.browser = webdriver.Chrome()self.wait = WebDriverWait(self.browser, 20)self.email = EMAILself.password = PASSWORDself.chaojiying = Chaojiying(CHAOJIYING_USERNAME, CHAOJIYING_PASSWORD, CHAOJIYING_SOFT_ID)def __del__(self):self.browser.close()def open(self):"""打开网页输入用户名密码:return: None"""self.browser.get(self.url)email = self.wait.until(EC.presence_of_element_located((By.ID, 'email')))password = self.wait.until(EC.presence_of_element_located((By.ID, 'password')))email.send_keys(self.email)password.send_keys(self.password)def get_touclick_button(self):"""获取初始验证按钮:return:"""button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'touclick-hod-wrap')))return buttondef get_touclick_element(self):"""获取验证图片对象:return: 图片对象"""element = self.wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'touclick-pub-content')))return elementdef get_position(self):"""获取验证码位置:return: 验证码位置元组"""element = self.get_touclick_element()time.sleep(2)location = element.locationsize = element.sizetop, bottom, left, right = location['y'], location['y'] + size['height'], location['x'], location['x'] + size['width']return (top, bottom, left, right)def get_screenshot(self):"""获取网页截图:return: 截图对象"""screenshot = self.browser.get_screenshot_as_png()screenshot = Image.open(BytesIO(screenshot))return screenshotdef get_touclick_image(self, name='captcha.png'):"""获取验证码图片:return: 图片对象"""top, bottom, left, right = self.get_position()print('验证码位置', top, bottom, left, right)screenshot = self.get_screenshot()captcha = screenshot.crop((left, top, right, bottom))captcha.save(name)return captchadef get_points(self, captcha_result):"""解析识别结果:param captcha_result: 识别结果:return: 转化后的结果"""groups = captcha_result.get('pic_str').split('|')locations = [[int(number) for number in group.split(',')] for group in groups]return locationsdef touch_click_words(self, locations):"""点击验证图片:param locations: 点击位置:return: None"""for location in locations:print(location)ActionChains(self.browser).move_to_element_with_offset(self.get_touclick_element(), location[0],location[1]).click().perform()time.sleep(1)def touch_click_verify(self):"""点击验证按钮:return: None"""button = self.wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'touclick-pub-submit')))button.click()def login(self):"""登录:return: None"""submit = self.wait.until(EC.element_to_be_clickable((By.ID, '_submit')))submit.click()time.sleep(10)print('登录成功')def crack(self):"""破解入口:return: None"""self.open()# 点击验证按钮button = self.get_touclick_button()button.click()# 获取验证码图片image = self.get_touclick_image()bytes_array = BytesIO()image.save(bytes_array, format='PNG')# 识别验证码result = self.chaojiying.post_pic(bytes_array.getvalue(), CHAOJIYING_KIND)print(result)locations = self.get_points(result)self.touch_click_words(locations)self.touch_click_verify()# 判定是否成功success = self.wait.until(EC.text_to_be_present_in_element((By.CLASS_NAME, 'touclick-hod-note'), '验证成功'))print(success)# 失败后重试if not success:self.crack()else:self.login()if __name__ == '__main__':crack = CrackTouClick()crack.crack()

爬虫之点触验证码的识别相关推荐

  1. python爬虫点触验证码的识别思路(图片版)

    转载于:https://www.cnblogs.com/yunlongaimeng/p/9508793.html

  2. Python爬虫实战 | (16) 破解简书登录点触验证码

    在本篇博客中,我们将使用selenium模拟登录简书网站,破解其登陆时的滑动验证码. 我们需要使用验证码识别服务平台.超级鹰,来帮助我们破解点触验证码.下面的chaojiying.py文件用于调用超级 ...

  3. Class 18 - 1 图形验证码的识别

    一.图形验证码的识别 先将验证码的图片保存到本. 打开开发者工具,找到验证码元素.验证码元素是一张图片,src 属性是 CheckCode.aspx.打开链接 http://my.cnki.net/e ...

  4. Python3 爬虫实战 — 模拟登陆12306【点触验证码对抗】

    登陆时间:2019-10-21 实现难度:★★★☆☆☆ 请求链接:https://kyfw.12306.cn/otn/resources/login.html 实现目标:模拟登陆中国铁路12306,攻 ...

  5. Python3 爬虫学习笔记 C14【验证码对抗系列 — 点触验证码】

    Python3 爬虫学习笔记第十四章 -- [验证码对抗系列 - 点触验证码] 文章目录 [14.1]关于点触验证码 [14.2]点触验证码攻克思路 [14.3]模拟登录 12306 - 总体思路 [ ...

  6. Python | 爬虫 | selenium自动化测试 | b站点触验证码登录

    其实说出来不怕大家笑话,我在学习爬虫的初始阶段梦想就是实现全自动登录b站并且获取b站里面自己想要获取的数据.如今也终于是实现了这个梦想,很感激csdn各位博主,您们撰写的博客给我带来的很大的帮助,谢谢 ...

  7. 【验证码的识别】—— 点触式验证码的识别

    一.前言 大家好,不知不觉的我来csdn已经又一周年了,在这一年里,我收获了很多东西,我是2022年2月22日入驻CSDN的,一开始只是为了方便浏览文章的,后来,我也有事没事发发文章,创作了100多篇 ...

  8. Python爬虫入门教程 57-100 python爬虫高级技术之验证码篇3-滑动验证码识别技术

    滑动验证码介绍 本篇博客涉及到的验证码为滑动验证码,不同于极验证,本验证码难度略低,需要的将滑块拖动到矩形区域右侧即可完成. 这类验证码不常见了,官方介绍地址为:https://promotion.a ...

  9. 爬虫:通过滑动或者点触验证码的方法及实现(点触+滑动)

    一.极验验证码(geetest)的三种验证模式 以极验官网登录(https://auth.geetest.com/login/)为例: 在点击 "点击按钮进行验证"按钮后,会出现三 ...

最新文章

  1. 银行程序代发工资的方法
  2. 【机器学习入门笔记5:OpenCV像素的基础知识】20190203
  3. 初使用swagger遇到的问题(1)
  4. python的pip换源_浅析Python3 pip换源问题
  5. Mysql中Drop删除用户的名字_mysql5.5 使用drop删除用户
  6. 因服务器配置不当,热门直播平台 Twitch 的125GB 数据和源代码被泄露
  7. 去除maven父依赖_如何在Maven中从父项目中排除依赖项?
  8. JavaScript BOM基础
  9. 在计算机中打开word2010三种方法,Word2019中打开文档的三种方式
  10. 古剑奇谭显示服务器维修,《古剑奇谭网络版》角色转服功能说明公告
  11. web移动开发总结(二)
  12. 如何查看一个期刊是sci几区以及影响因子 入藏号 ISSN等信息
  13. Quest、Mission、Task——游戏中的“任务”
  14. SCUT01在线协作白板技术解决方案
  15. 海淘 亚马逊 冻结账号 怎么办?
  16. 镜像翻转_【资讯】装动镜世界版假面骑士时王登场,镜像翻转也算新规?
  17. 【人工智能项目】缺陷检测分割数据集相关整理分享
  18. 5月第2周业务风控关注 | 央行:严禁未经授权认可的APP接入征信系统
  19. C++ setsockopt() 函数
  20. 国产数据库南大通用新三板上市获批

热门文章

  1. Android之获取外部存储空间解释
  2. [ukulele]入门指南
  3. [work] 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版】
  4. CVE-2020-1472: NetLogon特权提升漏洞通告
  5. 压缩pdf文件到特定大小,pdf格式文件如何压缩到最小
  6. EDraw 亿图图示设计软件 一款好用的绘制网络拓扑图的软件
  7. OTA线下攻防战 | 一点财经
  8. matlab书籍(数学建模,信号处理,智能优化,统计分析)
  9. PWM方波的理解浅谈
  10. Debain8 Tomcat8 JDK8 实现SSL双向验证