当前位置:网站首页>12306: mom, don't worry about me getting the ticket any more (1)
12306: mom, don't worry about me getting the ticket any more (1)
2022-07-06 15:20:00 【Jane said Python】
One 、 Write it at the front
On the occasion of national day , I'm still trying to get a train ticket , I can only take the bus home and worry ~ And you? ?
The good news is here. , After learning this tweet , You don't have to ask for this circle of friends every day anymore , Please qq There's space .
Chapter one , So let's log in 12306, After reading this , You will learn to : How to simulate login , Basic image verification method , striking one snag after another , The process is interesting , Refer to some online materials .
Two 、 A meal operation
technological process ( The words are a little ugly , Just look ):
1. Login image verification cracking
(1) Get the login page ,session preservation cookies value .
Access page :https://kyfw.12306.cn/otn/login/init
,F12 Page analysis , as follows :
Headers in
Request URL: https://kyfw.12306.cn/otn/login/init
Request Method: GET
- Code :
import requests import os from fake_useragent import UserAgent # 1. Get login # Request header , Anti creep camouflage headers = {
"User-Agent": UserAgent(verify_ssl=False).random, "Host":"kyfw.12306.cn", "Referer":"https://kyfw.12306.cn/otn/passport?redirect=/otn/" } login_url = 'https://kyfw.12306.cn/otn/login/init' # 1.1 cookie keep session = requests.Session() # 1.2 get request login_response = session.get(login_url,headers = headers) login_html = login_response.text # print(login_html)
(2) Get the verification picture , Crack the verification operation
- Cracking ideas :
Download the verification image from the page to the local , Then select the correct picture position as required , Pass the correct picture coordinates , Click on the simulation page , Send a request , Simulate the verification operation . - Verify image page analysis :
Headers in
Request URL: https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.8854830207575652
Request Method: GET
- Check the validation analysis :
You must enter the account password on the page , Only after verifying the selection can it be loaded , So I enter my account number and wrong password , Picture verification , Load the following results :
captcha-check : Used to check and verify whether the picture is selected correctly ( Verify the correct )
login : User login account 、 Password judgment
All are POST request
Headers in
Request URL: https://kyfw.12306.cn/passport/captcha/captcha-check
Request Method: POST
data = {
“answer”: positions,
“login_site”: “E”,
“rand”: “sjrand”
}
- Code :
# 2. Get and crack the authentication operation # 2.1 Download verification picture captcha_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.8854830207575652' captcha_response = session.get(captcha_url,headers = headers) # File save path image_path = os.path.abspath('image') + '/captcha_image.jpg' # Write to file in binary with open(image_path,'wb') as image_file: image_file.write(captcha_response.content) # 2.2 verification check_url = 'https://kyfw.12306.cn/passport/captcha/captcha-check' # The input data format is :x1,y1,x2,y2,...,xn,yn positions = input(" Please enter the verification code : ") # Correct picture coordinates # Send verification code data = {
"answer": positions, "login_site": "E", "rand": "sjrand" } check_response = session.post(check_url,data = data,headers = headers) check_result = check_response.json() # Tests found ,result_code = 4 when , Indicates that the verification is successful if not check_result['result_code'] == 4: exit(" Validation failed ") print(check_result )
- Running results :
2. Sign in
(1) Sign in login analysis
- F12 analysis
Request URL: https://kyfw.12306.cn/passport/web/login
Request Method: POST
data = {
‘username’: Account_number, # The user account
‘password’: Password, # User password
‘appid’: ‘otn’
}
- Code :
# 3. Start the login operation login_check_url = 'https://kyfw.12306.cn/passport/web/login' login_check_data = {
'username': Account_number, 'password': Password, 'appid': 'otn' } login_check_response = session.post(login_check_url,data=login_check_data,headers = headers) print(login_check_response.json())
- Running results :
However, there is no real login success .
(1) Sign in Access
- Basic analysis
Successfully logged in 12306 The following page is an illustration :
You can find that the source code of the page we crawled does not contain my name : Are we really successful in login ,12306 The internal permission verification of is troublesome , It can be seen from the initial diagram , Disguised verification , In addition to the password and account number input , And permission settings , Or two floors , The code is as follows , If you don't understand, add me on wechat :zs820553471 Well .
- Code
# 4. Access permissions authority # 4.1 Get permission key :newapptk uamtk_data = {
"appid":"otn" } uamtk_url = "https://kyfw.12306.cn/passport/web/auth/uamtk" uamtk_response = session.post(uamtk_url, headers=headers, data=uamtk_data) uamtk_dict = uamtk_response.json() newapptk = uamtk_dict['newapptk'] # print(uamtk_dict['newapptk']) # 4.2 Pass key , Access permissions uamauthclient_data = {
"tk" : newapptk } uamauthclient_url = "https://kyfw.12306.cn/otn/uamauthclient" uamauthclient_response = session.post(uamauthclient_url, headers=headers, data=uamauthclient_data) # 5 Really login initMy_url = "https://kyfw.12306.cn/otn/index/initMy12306" initMy_response = session.get(initMy_url, headers=headers) my_name = initMy_response.text.find(" Zhang Jianhua ") if not my_name == -1: print(" The user has successfully logged in ")
- Running results
3、 ... and 、 Just talk about
When I first wrote this tweet, I wanted to finish it one by one 12306 Sign in , Train number information acquisition , Grab tickets , Ticket purchase , It can be written , Finding things is not so simple , The spirit is willing but the flesh is weak , Yesterday in GitHub I opened an account on the Internet ,12306 The series will be in GitHub Update on ( The code has been on the code cloud before , The convenience of Chinese ), Welcome aboard , With complete , No longer worry about buying tickets .
边栏推荐
- 转行软件测试必需要知道的知识
- Global and Chinese markets for GaN on diamond semiconductor substrates 2022-2028: Research Report on technology, participants, trends, market size and share
- Global and Chinese market of maleic acid modified rosin esters 2022-2028: Research Report on technology, participants, trends, market size and share
- 線程及線程池
- Introduction to safety testing
- 基于485总线的评分系统双机实验报告
- CSAPP家庭作業答案7 8 9章
- Stc-b learning board buzzer plays music 2.0
- Leetcode simple question: check whether the numbers in the sentence are increasing
- Logstack introduction and deployment -- elasticstack (elk) work notes 019
猜你喜欢
CSAPP homework answers chapter 789
接口测试面试题及参考答案,轻松拿捏面试官
How to build a nail robot that can automatically reply
STC-B学习板蜂鸣器播放音乐2.0
What to do when programmers don't modify bugs? I teach you
Automated testing problems you must understand, boutique summary
STC-B学习板蜂鸣器播放音乐
[HCIA continuous update] advanced features of routing
线程及线程池
ucore lab6 调度器 实验报告
随机推荐
接口测试面试题及参考答案,轻松拿捏面试官
软件测试工作太忙没时间学习怎么办?
Leetcode simple question: check whether the numbers in the sentence are increasing
A method and implementation of using VSTO to prohibit excel cell editing
ucore lab1 系统软件启动过程 实验报告
MySQL数据库(二)DML数据操作语句和基本的DQL语句
ucore lab6 调度器 实验报告
Description of Vos storage space, bandwidth occupation and PPS requirements
[C language] twenty two steps to understand the function stack frame (pressing the stack, passing parameters, returning, bouncing the stack)
Mysql database (V) views, stored procedures and triggers
几款开源自动化测试框架优缺点对比你知道吗?
安全测试入门介绍
Future trend and planning of software testing industry
Global and Chinese markets of cobalt 2022-2028: Research Report on technology, participants, trends, market size and share
Leetcode notes - dynamic planning -day6
How to write the bug report of software test?
The minimum number of operations to convert strings in leetcode simple problem
China's county life record: go upstairs to the Internet, go downstairs' code the Great Wall '
Threads et pools de threads
C language do while loop classic Level 2 questions