python识别验证码登陆学校网站
使用技术
网络获取requests
网络解析bs4
验证码识别模块tesserocr
登陆的网站
http://sso.sdwz.cn/cas/captcha
代码
import requests
from bs4 import BeautifulSoup
import urllib.request
import os
from urllib import parse
import tesserocr
from PIL import Imageurl = "http://sso.sdwz.cn/cas/login"s = requests.Session()def getImage():captcha = "http://sso.sdwz.cn/cas/captcha"img = s.get(captcha).contentwith open("1.jpg", "wb") as f:f.write(img)current_dir = os.path.dirname(os.path.abspath(__file__))image = Image.open(current_dir + "\\1.jpg")image = image.convert('L') # 转化为灰度图threshold = 127 # 设定的二值化阈值table = [] # table是设定的一个表,下面的for循环可以理解为一个规则,小于阈值的,就设定为0,大于阈值的,就设定为1for i in range(256):if i < threshold:table.append(0)else:table.append(1)image = image.point(table, '1') # 对灰度图进行二值化处理,按照table的规则(也就是上面的for循环)result = tesserocr.image_to_text(image) # 对去噪后的图片进行识print("验证码为--", result)return result.replace("\n", "").replace(" ", "")def post(session, captcha, execution):global urlheaders = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36","Cookie": "SESSION=" + session,"Content-Type": "application/x-www-form-urlencoded","Upgrade-Insecure-Requests": "1"}data = {"execution": execution,"_eventId": "submit","geolocation": "","type": 1,"username": "xxxx","password": "xxxx","captcha": captcha,"phone": "","smsCode": "","_rememberMe": "on"}print(data)payload = parse.urlencode(data)print(payload)html = s.post(url, headers=headers, data=payload, verify=False)# 打印登录成功后的页面print(html.text)def get():global urlheaders = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36",}data = s.get(url, headers=headers)cookies = data.cookies.get_dict()se = cookies["SESSION"]# flowKeyInfoHrefsubject = BeautifulSoup(data.text, "html.parser")execution = subject.select(".flowKeyInfoHref")[0]["href"]print("execution--", execution)print("session---", se)post(se, getImage(), execution)if __name__ == '__main__':get()
使用selenium模拟登陆
import requestsimport cv2 as cv
import tesserocr
from PIL import Image
import urllib.request
import osfrom selenium import webdriver
from time import sleep# pip install selenium# 2017249042
# 1074827413zhY# 获取二维码
def getImage(browser):# 获取验证码的网址# url = "http://sso.sdwz.cn/cas/captcha"# rsp = urllib.request.urlopen(url)# img = rsp.read()# with open("1.jpg", "wb") as f:# f.write(img)browser.save_screenshot('1.png')imgelement = browser.find_element_by_class_name('code-img')location = imgelement.locationprint(location)size = imgelement.sizeprint(size)# x = int(location['x'])# y = int(location['y'])x = 1100y = 520# width = int(size['width'])# height = int(size["height"])width = 120height = 50rangle = (x, y, x + width, y + height)print(rangle)i = Image.open("1.png") # 打开截图result = i.crop(rangle) # 使用Image的crop函数,从截图中再次截取我们需要的区域current_dir = os.path.dirname(os.path.abspath(__file__))result.save(current_dir + "\\result.png")image = Image.open(current_dir + "\\result.png")image = image.convert('L') # 转化为灰度图threshold = 127 # 设定的二值化阈值table = [] # table是设定的一个表,下面的for循环可以理解为一个规则,小于阈值的,就设定为0,大于阈值的,就设定为1for i in range(256):if i < threshold:table.append(0)else:table.append(1)image = image.point(table, '1') # 对灰度图进行二值化处理,按照table的规则(也就是上面的for循环)result = tesserocr.image_to_text(image) # 对去噪后的图片进行识return result.replace(" ", "")# 进行登录
def login():# http://npm.taobao.org/mirrors/chromedriver/# 谷歌的驱动器headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36","Content-Type": "application/x-www-form-urlencoded"}url = "http://sso.sdwz.cn/cas/login"data = {"execution": "e2s1","_eventId": "submit","geolocation": "","type": 1,"username": "2017249042","password": "1074827413zhY","captcha": "T1zg","phone": "","smsCode": "","_rememberMe": "on"}#browser = webdriver.Chrome()browser.minimize_window()browser.get('http://sso.sdwz.cn/cas/login')# 设置用户名和密码browser.find_element_by_id("username").clear()browser.find_element_by_id("username").send_keys("2017249042")browser.find_element_by_id("password").clear()browser.find_element_by_id("password").send_keys("1074827413zhY")# 添加验证码result = getImage(browser)print("验证码",result)browser.find_element_by_id("captcha").clear()browser.find_element_by_id("captcha").send_keys(result)# 点击按钮browser.find_element_by_id("login-phone").click()# 打印页面print(browser.page_source)sleep(10)# 关闭browser.close()if __name__ == '__main__':# 下载安装tesseract-orc# https://digi.bib.uni-mannheim.de/tesseract/login()
python识别验证码登陆学校网站相关推荐
- python识别验证码——PIL,pytesser,pytesseract的安装
1.使用Python识别验证码需要安装Python的图像处理模块(PIL.pytesser.pytesseract) (安装过程需要pip,在我的Python中已经安装pip了,pip的安装就不在赘述 ...
- Python识别验证码----谷歌reCapture 4*4验证码
Python识别验证码----谷歌reCapture 4*4验证码 写在前面 数据特点 识别思路 识别结果 改进点 写在前面 近日某众打码平台被跑路的消息一出,脚本圈中一片哗然(我并不是脚本圈的,只是 ...
- Python识别验证码----数美图标点选
Python识别验证码----数美图标点选 写在前面 数据特点 获取数据 识别思路 按顺序抠出F4 定位f4 计算相似度 打标签(~~偷懒~~ ) 训练孪生网络 使用模型 识别结果 改进点 写在前面 ...
- Python识别验证码----网易易盾推理拼图
Python识别验证码----网易易盾拼图推理 写在前面 数据特点 获取数据 识别思路 识别结果 改进点 写在前面 近日某众打码平台被跑路的消息一出,脚本圈中一片哗然(我并不是脚本圈的,只是喜欢看群里 ...
- Python识别验证码----谷歌reCapture 3*3验证码
Python识别验证码----谷歌reCapture 3*3验证码 写在前面 数据特点 识别思路 识别结果 改进点 写在前面 近日某众打码平台被跑路的消息一出,脚本圈中一片哗然(我并不是脚本圈的,只是 ...
- 用Python识别验证码
[摘要] 爬虫过程中难免会碰到验证码,各种各样的验证码似乎阻挡了爬虫的脚步. 由于本文实现的功能是在内网环境完成,因此,没有代码介绍,也没有识别效果展示. 爬虫过程中难免会碰到验证码,各种各样的验证码 ...
- python爬虫验证码的处理(云打码)_用Python识别验证码
由于本文实现的功能是在内网环境完成,因此,没有代码介绍,也没有识别效果展示. 爬虫过程中难免会碰到验证码,各种各样的验证码似乎阻挡了爬虫的脚步. 为了识别机器和真实用户而诞生的爬虫 碰到验证码有两个方 ...
- Python爬虫入门教程 60-100 python识别验证码,阿里、腾讯、百度、聚合数据等大公司都这么干...
常见验证码 之前的博客中已经解决了一些常见验证码的问题,但是验证码是层出不穷的,目前解决验证码除了通过常规手段解决以外,还可以通过人工智能领域的深度学习去解决 深度学习?! 无疑对爬虫coder提高了 ...
- Python爬虫入门教程 60-100 python识别验证码,阿里、腾讯、百度、聚合数据等大公司都这么干
常见验证码 之前的博客中已经解决了一些常见验证码的问题,但是验证码是层出不穷的,目前解决验证码除了通过常规手段解决以外,还可以通过人工智能领域的深度学习去解决 深度学习?! 无疑对爬虫coder提高了 ...
最新文章
- OpenCV 多层感知器训练代码示例
- 简单说一下Nginx配置说明
- Improved Alpha-Tested Magnification for Vector Textures and Special Effects
- C#之windows桌面软件第五课:串口助手实现定时关闭设备、鼠标移动使按钮颜色变化功能
- Hadoop Yarn公平调度器的特点、缺额、DRF策略
- ConcurrentHashMap的源码分析-tabAt
- docker之docker-machine用法
- Keepalived实现mysql高可用
- rac节点频繁重启的问题分析
- ubuntu14.04 配置C/C++开发IDE
- 纪念我的第一次面试——华为研发类面试
- 模拟京东快递单号查询
- Go语言编程设计学习Day1:helloworld 变量 常量
- 推荐系统实践——什么是推荐系统
- NVENC SDK 设置h264编码的slice划分问题
- NBUT 1665 木块拼接
- MTK 按键驱动流程总结
- Hanselminutes播客153-Scott的妻子Mo采访Scott Hanselman
- Python:用tkinter制做一个音乐下载小软件
- 淘宝开放平台架构整理资料
热门文章
- emacs文件/目录比较工具
- Service与Android系统实现(1)-- 应用程序里的Service
- 这世上最快的捷径就是脚踏实地
- wpf之默认窗口模板研究
- 计算机基础(六):内存申请方式
- linux openssh 升级最新版本
- (已解决) centos6.5 yum源 失效 The whole CentOS 6 is dead and shouldn’t be used anywhere at all
- 基础04继承、super、this、抽象类
- linux nfs限制连接数,linux – 对NFS有一个有效的稳定性参数吗?
- 浙江独立学院计算机专业排名2015,2014-2015年中国独立学院排名