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): ...
随机推荐
- RAC 设置archive log模式
首先设置 archive log的位置 SQL> alter system set log_archive_dest='+DATA/orcl/archive/'; System altered. ...
- 【CV论文阅读】Rank Pooling for Action Recognition
这是期刊论文的版本,不是会议论文的版本.看了论文之后,只能说,太TM聪明了.膜拜~~ 视频的表示方法有很多,一般是把它看作帧的序列.论文提出一种新的方法去表示视频,用ranking function的 ...
- 编程规范(一 之kmalloc,fflush,fclose,char_init)
1. kmalloc函数接口: 在我们使用的时候常常使用该接口,可是我们非常少注意过这个接口的一些比較重要的 内核接口.比如: /*申请一个HASH表的大小*/ #define HASH_MALLOC ...
- [Angular] New in V6.1
Router Scroll Position Restoration: remember and restore scroll position as the user navigates aroun ...
- 从头认识java-15.1 填充容器(1)-利用Collection构造器的方式
这一章节我们来介绍一下填充容器. 就像数组一样,Arrays.fill是填充方法,在容器里面也有. 1.Collections.nCopies 这种方法是生成某种类型多少个对象,然后我们能够把他放到容 ...
- C#之out和ref区别
out与ref的区别总结:1.两者都是通过引用来传递.2.两者都按地址传递的,使用后都将改变原来参数的数值.3.属性不是变量,因此不能作为 out或ref 参数传递.4.若要使用 ref 或 out, ...
- VFL语言简洁
一.VFL语言简洁 VFL(Visual format language)语言是苹果为了简化手写Autolayout代码所创建的专门负责编写约束的代码.为我们简化了许多代码量. 二.使用步骤 使用步骤 ...
- mac 下安装Anaconda Python
# 将anaconda的bin目录加入PATH echo 'export PATH="/Users/work/anaconda/bin/:$PATH"' >> ~/.b ...
- GTK经常使用控件之笔记本控件( GtkNotebook )
笔记本控件,能够让用户标签式地切换多个界面. 当我们须要多窗体切换时,使用笔记本控件是一个明智的选择. 笔记本控件的创建: GtkWidget *gtk_notebook_new(void); 返回值 ...
- CentOS6.5下用Git克隆代码(https方式)
一.首先最好保证GIT是最新版 查看GIT命令 $ git --version 有关git的安装,应该有好多文章介绍.注意更新之后,要重启系统,否则显示的版本号,还是老版本. 二.如果工作环境存在网络 ...