代码仅限于技术交流
import requests
from PIL import Image
import matplotlib.pyplot as plt
class Login(object):
def __init__(self):
self.session = requests.session()
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36'
}
self.login_url = 'https://kyfw.12306.cn/otn/login/init'
self.load_image_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login'
self.captcha_check_url = 'https://kyfw.12306.cn/passport/captcha/captcha-check'
self.user_login_url = 'https://kyfw.12306.cn/passport/web/login'
def login(self):
pass
def image_code_number(self,num):
option = {
'1': '40,40',
'2': '110,40',
'3': '180,40',
'4': '260,40',
'5': '40,110',
'6': '100,110',
'7': '180,40',
'8': '260,40'
}
check_num = []
if len(num) == 1:
check_num = option[num]
else:
image_num = num.split(',')
for i in image_num:
check_num.append(option[i])
check_num = ','.join(check_num)
print(check_num)
return check_num
def load_verify_image(self):
'''
answer: 120,40
login_site: E
rand: sjrand
'''
response = self.session.get(url=self.load_image_url,headers=self.headers)
contents = response.content
with open('check_image.jpg', 'wb') as f:
f.write(contents)
print('图片下载成功!')
def show_image(self):
img = Image.open('check_image.jpg')
plt.figure("check_image")
plt.imshow(img)
plt.show()
def verify_image_code(self):
num = input('请输入正确的验证码:')
data = {
'answer': self.image_code_number(num),
'login_site': 'E',
'rand': 'sjrand'
}
response = self.session.post(self.captcha_check_url,data=data,headers=self.headers)
print(response.text)
def user_login(self):
'''
username: 133
password: 12313123
appid: otn
'''
data = {
'username': '***',
'password': '***',
'appid': 'otn'
}
response = self.session.post(self.user_login_url, data=data, headers=self.headers)
print(response.text)
def run(self):
self.load_verify_image()
self.show_image()
self.verify_image_code()
self.user_login()
railway = Login()
railway.run()