Python 之12306网站验证码校验案例
import requests
from PIL import Image
import jsons requests.packages.urllib3.disable_warnings() headers = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
session = requests.session() # 获取验证码位置
def get_captcha_position(img_name="12303_captcha.png"):
url = "https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand";
try:
response = session.get(url=url, headers=headers, verify=False)
except ConnectionError as e:
print(e)
else:
with open(img_name, "wb") as f:
f.write(response.content)
try:
# 人眼查看验证码
with Image.open(img_name) as img:
img.show()
except FileNotFoundError as e:
print(e)
else:
# =======================================================================
# 根据打开的图片识别验证码输入图片索引序号,有可以是1张、2张、3张图片的序号,序号之间用逗号隔开
# 例如2,4,6,表示第1排第2,第2排第4,6张
# ---------------------------------------
# | | |
# 0 | 1 | 2 | 3
# | | |
# ---------------------------------------
# | | |
# 4 | 5 | 6 | 7
# | | |
# ---------------------------------------
# =======================================================================
input_index = input('请输入验证码位置,以","分割(例如2,4,6):')
return input_index # 校验验证码
def check_captcha(index):
index_list = str(index).split(",")
# 由于12306官方验证码是验证正确验证码的坐标范围,我们取每个验证码中点的坐标(大约值)
img_center_position = ['35,35', '105,35', '175,35', '245,35', '35,105', '105,105', '175,105', '245,105']
right_position = []
for i in index_list:
right_position.append(img_center_position[int(i)])
right_position_str = ",".join(right_position)
check_captcha_url = "https://kyfw.12306.cn/passport/captcha/captcha-check"
data = {
'login_site': 'E', # 固定的
'rand': 'sjrand', # 固定的
'answer': right_position_str # 验证码对应的中心坐标字符串序号
}
try:
response = session.post(url=check_captcha_url, data=data, headers=headers, verify=False)
except ConnectionError as e:
print(e)
else:
json_result = jsons.loads(response.content)
print(json_result)
check_code = int(json_result['result_code'])
# 取出验证结果,4:成功 5:验证失败 7:过期
if check_code == 4:
print(json_result['result_message'])
return True
elif check_code == 5:
print(json_result['result_message'])
else:
print(json_result['result_message'])
return False def main():
img_index = get_captcha_position()
check_captcha(img_index) if __name__ == '__main__':
main()
结果如图:


Python 之12306网站验证码校验案例的更多相关文章
- python+splinter实现12306网站刷票并自动购票流程
python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...
- AJAX应用【股票案例、验证码校验】
一.股票案例 我们要做的是股票的案例,它能够无刷新地更新股票的数据.当鼠标移动到具体的股票中,它会显示具体的信息. 我们首先来看一下要做出来的效果: 1.1服务器端分析 首先,从效果图我们可以看见很多 ...
- python爬虫之12306网站--火车票信息查询
python爬虫之12306网站--火车票信息查询 思路: 1.火车票信息查询是基于车站信息查询,先完成车站信息查询,然后根据车站信息查询生成的url地址去查询当前已知出发站和目的站的所有车次车票信息 ...
- python 验证码 高阶验证
python 验证码 高阶验证 标签: 验证码python 2016-08-19 15:07 1267人阅读 评论(1) 收藏 举报 分类: 其他(33) 目录(?)[+] 字符型图片验证 ...
- 假如我来架构12306网站---文章来自csdn(Jackxin Xu IT技术专栏)
(一)概论 序言: 此文的撰写始于国庆期间,当中由于工作过于繁忙而不断终止撰写,最近在设计另一个电商平台时再次萌发了完善此文并且发布此文的想法,期望自己的绵薄之力能够给予各位同行一些火花,共同推进国 ...
- Python下载安装及验证
目录: 一.Python介绍 二.python安装及验证 一.Python介绍 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个 ...
- JSP页面实现验证码校验
目录 验证码校验分析 生成验证码 测试验证码 校验验证码 测试验证码校验 添加验证码刷新 在网页页面的使用中为防止"非人类"的大量操作和防止一些的信息冗余,增加验证码校验是许多网站 ...
- 利用Hutool-(Java工具类)实现验证码校验
目录 Hutool工具类介绍 Hutool实现验证码生成 测试验证码生成 其他样式的验证码 第一篇是纯利用现有JDK提供的绘图类(ImageIO)类制作,这个过程比较复杂且需要了解ImageIO类. ...
- python爬某个网站的图片
# _*_ coding: gbk _*_ import urllib import urllib2 import re class Spider: def getImage(self,html): ...
随机推荐
- 非常适合新手的jq/zepto源码分析06 -- 事件模型
复习下事件的有关内容: 1.现在用的绑定/删除: obj.addEventListener(type,fn,false) obj.removeEventListener(type) obj.attac ...
- 【一】注入框架RoboGuice使用:(A brief example of what RoboGuice does)
在我们平时开发Android项目的时候比如常常须要使用各种View控件,然后进行声明.findViewById.而且进行强转.每次都要写这种代码就显得很繁琐,而且easy出错哦.那么针对这种情况且不限 ...
- 【Cocos2dx游戏开发】CCTableView实现滑动列表
在游戏中,经常需要用到列表展示,例如我现在做的卡牌游戏中就有卡牌列表和好友列表需要用到CCTableView,下面简单介绍一下使用方法. CCTableView位于扩展库文件cocos-ext.h中, ...
- SQL分离附加数据库
转自:http://www.jb51.net/article/36624.htm
- 65. ExtJs获取文本框中值的几种方式
转自:https://blog.csdn.net/qiu512300471/article/details/17415675/ 1.Html文本框 如:<input type=" ...
- 01_ndk目录介绍
精力都放在安卓上.所以说呢C这个东西不要纠结太多,对大家的要求就是能看懂,会调用. Java的特点是一处编译到处运行,跨平台.优势是比native语言强,一处编译到处运行.native语言的劣势是不能 ...
- 使用psutil模块获取电脑运行信息
psutil是python的一个用于获取cpu信息的模块,非常好使,以下附上官方的一些example: CPU-> Examples >>> import psutil > ...
- E20171006-hm
trace vt. 跟踪,追踪; 追溯,探索; 探索; 查找; vi. 沿着一小径或道路前进; 可以追溯的; n. 痕迹; 痕迹,踪迹; 微量,极少量; [植 ...
- Area of Polycubes
http://poj.org/problem?id=3792 题意:给出n个小正方体的中心坐标,求构成的多重小立方体的表面积.要求输入的下一个小正方体必须与之前的正方体有一个面是相交的.如果不满足条件 ...
- jquery插件开发基本步骤
一.介绍 插件编写的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护. JQuery除了提供一个简单.有效的方式进行管理元素以及脚本,它还还提供了例外一种机制:即给核心 ...