使用技术
网络获取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识别验证码登陆学校网站相关推荐

  1. python识别验证码——PIL,pytesser,pytesseract的安装

    1.使用Python识别验证码需要安装Python的图像处理模块(PIL.pytesser.pytesseract) (安装过程需要pip,在我的Python中已经安装pip了,pip的安装就不在赘述 ...

  2. Python识别验证码----谷歌reCapture 4*4验证码

    Python识别验证码----谷歌reCapture 4*4验证码 写在前面 数据特点 识别思路 识别结果 改进点 写在前面 近日某众打码平台被跑路的消息一出,脚本圈中一片哗然(我并不是脚本圈的,只是 ...

  3. Python识别验证码----数美图标点选

    Python识别验证码----数美图标点选 写在前面 数据特点 获取数据 识别思路 按顺序抠出F4 定位f4 计算相似度 打标签(~~偷懒~~ ) 训练孪生网络 使用模型 识别结果 改进点 写在前面 ...

  4. Python识别验证码----网易易盾推理拼图

    Python识别验证码----网易易盾拼图推理 写在前面 数据特点 获取数据 识别思路 识别结果 改进点 写在前面 近日某众打码平台被跑路的消息一出,脚本圈中一片哗然(我并不是脚本圈的,只是喜欢看群里 ...

  5. Python识别验证码----谷歌reCapture 3*3验证码

    Python识别验证码----谷歌reCapture 3*3验证码 写在前面 数据特点 识别思路 识别结果 改进点 写在前面 近日某众打码平台被跑路的消息一出,脚本圈中一片哗然(我并不是脚本圈的,只是 ...

  6. 用Python识别验证码

    [摘要] 爬虫过程中难免会碰到验证码,各种各样的验证码似乎阻挡了爬虫的脚步. 由于本文实现的功能是在内网环境完成,因此,没有代码介绍,也没有识别效果展示. 爬虫过程中难免会碰到验证码,各种各样的验证码 ...

  7. python爬虫验证码的处理(云打码)_用Python识别验证码

    由于本文实现的功能是在内网环境完成,因此,没有代码介绍,也没有识别效果展示. 爬虫过程中难免会碰到验证码,各种各样的验证码似乎阻挡了爬虫的脚步. 为了识别机器和真实用户而诞生的爬虫 碰到验证码有两个方 ...

  8. Python爬虫入门教程 60-100 python识别验证码,阿里、腾讯、百度、聚合数据等大公司都这么干...

    常见验证码 之前的博客中已经解决了一些常见验证码的问题,但是验证码是层出不穷的,目前解决验证码除了通过常规手段解决以外,还可以通过人工智能领域的深度学习去解决 深度学习?! 无疑对爬虫coder提高了 ...

  9. Python爬虫入门教程 60-100 python识别验证码,阿里、腾讯、百度、聚合数据等大公司都这么干

    常见验证码 之前的博客中已经解决了一些常见验证码的问题,但是验证码是层出不穷的,目前解决验证码除了通过常规手段解决以外,还可以通过人工智能领域的深度学习去解决 深度学习?! 无疑对爬虫coder提高了 ...

最新文章

  1. OpenCV 多层感知器训练代码示例
  2. 简单说一下Nginx配置说明
  3. Improved Alpha-Tested Magnification for Vector Textures and Special Effects
  4. C#之windows桌面软件第五课:串口助手实现定时关闭设备、鼠标移动使按钮颜色变化功能
  5. Hadoop Yarn公平调度器的特点、缺额、DRF策略
  6. ConcurrentHashMap的源码分析-tabAt
  7. docker之docker-machine用法
  8. Keepalived实现mysql高可用
  9. rac节点频繁重启的问题分析
  10. ubuntu14.04 配置C/C++开发IDE
  11. 纪念我的第一次面试——华为研发类面试
  12. 模拟京东快递单号查询
  13. Go语言编程设计学习Day1:helloworld 变量 常量
  14. 推荐系统实践——什么是推荐系统
  15. NVENC SDK 设置h264编码的slice划分问题
  16. NBUT 1665 木块拼接
  17. MTK 按键驱动流程总结
  18. Hanselminutes播客153-Scott的妻子Mo采访Scott Hanselman
  19. Python:用tkinter制做一个音乐下载小软件
  20. 淘宝开放平台架构整理资料

热门文章

  1. emacs文件/目录比较工具
  2. Service与Android系统实现(1)-- 应用程序里的Service
  3. 这世上最快的捷径就是脚踏实地
  4. wpf之默认窗口模板研究
  5. 计算机基础(六):内存申请方式
  6. linux openssh 升级最新版本
  7. (已解决) centos6.5 yum源 失效 The whole CentOS 6 is dead and shouldn’t be used anywhere at all
  8. 基础04继承、super、this、抽象类
  9. linux nfs限制连接数,linux – 对NFS有一个有效的稳定性参数吗?
  10. 浙江独立学院计算机专业排名2015,2014-2015年中国独立学院排名