【2019.06.22】12306官网模拟登陆之验证码生成与验证初探

38 篇文章 2 订阅
19 篇文章 3 订阅

前言

每一个学习过爬虫的人对12306肯定都是有点想法,但在每年春节或一些假期经历过12306官网抢票后,这些念头便逐渐不剩下多少了。有时候真的是活生生的人都瞅不出来
一直没有勇气去分析一下12306官网

请求分析

  1. 我们简单抓包就可以找到生成验证码的接口
    在这里插入图片描述
    去除一些暂时无关的参数(仅分析验证码)
    https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand
    在这里插入图片描述
  2. 验证验证码是否正确的接口
    其中answer表示验证码的坐标位置
    answer: 34,34,38,105
    在这里插入图片描述

代码思路

import requests


headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36'
}

login_url = 'https://kyfw.12306.cn/otn/resources/login.html'
session = requests.Session()
session.get(login_url)

image_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand'
req = session.get(image_url, headers=headers).content
with open('code.png', 'wb') as f:
    f.write(req)
    
check_url = 'https://kyfw.12306.cn/passport/captcha/captcha-check'


point_dict = {
    '1': '37,40',
    '2': '112,40',
    '3': '187,40',
    '4': '262,40',
    '5': '37,120',
    '6': '112,120',
    '7': '187,120',
    '8': '262,120',
}
def get_point(indexs):
    indexs = indexs.split(',')
    temp = []
    for index in indexs:
        temp.append(point_dict[index])
    return ','.join(temp)

params = {
'answer': get_point(input('请输入验证码位置')),
'rand':'sjrand',
'login_site':'E',
}
response = session.get(check_url, params=params, headers=headers).text
print(response)

分析

12036 验证码 问题就在如何确认应该点击的坐标位置,目前还没有发现合适的做法,不知道有哪位大佬可以指点一下,有了解的大码平台也可以推荐一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值