python实现登录12306网站查看火车票信息,Python面试回忆录

5 groups = capture_result.get(“pic_str”).split(‘|’)

6 points = [[int(number) for number in group.split(‘,’)] for group in groups]

7 for point in points:

8 # 先定位到验证图片

9 element = WebDriverWait(browser, 20).until(

10 EC.presence_of_element_located((By.CLASS_NAME, “touclick-bgimg”)))

11 # 模拟点击验证图片

12 ActionChains(browser).move_to_element_with_offset(element, point[0], point[1]).click().perform()

13 sleep(1)

二、查询


带有车票信息的ajax接口很容易找到,格式也是标准的json格式,解析起来会方便不少

在这里插入图片描述

但是爆保存车票的字符串很复杂,我们先把第一条信息打印出来看看,以下是部分信息:

'hH0qeKPBgl0X0aCnrtZFyBgzqydzV45U2M1r%2F32FsaPHeb7Mul00sIb7y9W%2B6df1tUdDGCxqdVs8%0Aw2VodSjdXjUQ2uNdwFprKdVK9iaW60Wj2jKpNKaViR4ndlBCjsYB0SIF

QR0pLksy7HDP0KcaoLe4%0A4RW6zRcscO7SRNJZOsF%2Fxj3Ooq76lzzdku3Uw957yjLFyf7ikixOaC%2FAOrLAwCc7y0krRpKJbSn3%0ApBsY%2F%2Fok%2Bmg2xNhXapoCPIt4w0p9’,  这段字符是随机生成的,过几秒就回失效。

‘39000D30280G’,  列车编号

‘D3028’,  车次

‘HKN’,  始发站

‘AOH’,  终点站

‘HKN’,  出发站

‘AOH’,  目的站

‘07:31’,  出发时间

‘13:06’,  到达时间

‘05:35’,  总耗时

‘Y’,  Y表示可以购票,N表示不可以

‘20181111’,  日期

后面基本都是座位的余票信息了。

对于提到的列车站点代码,可以通过请求这个链接,通过得到JS脚本中的station_names变量获取,对应的站点以@字符分隔,相关代码如下:

1 # 请求保存列车站点代码的链接

2 res1 = requests.get(“https://kyfw.12306.cn/otn/resources/js/framework/station_name.js”)

3 # 把分割处理后的车站信息保存在station_data中

4 self.station_data = res1.text.lstrip(“var station_names ='”).rstrip(“'”).split(‘@’)

1 # 返回车站英文缩写

2 def get_station(self, city):

3 for i in self.station_data:

4 if city in i:

5 return i.split(‘|’)[2]

6

7 # 返回车站中文缩写

8 def get_city(self, station):

9 for i in self.station_data:

10 if station in i:

11 return i.split(‘|’)[1]

由于ajax接口有了一点变化,所以我对之前的代码做了一点修改,在输入数据的部分:

1 # 需要按2018-01-01的格式输入日期,不然会出现错误

2 d = input(“请输入日期(如:2018-01-01):”)

3 f = self.get_station(input(“请输入您的出发站:”))

4 t = self.get_station(input(“请输入您的目的站:”))

5 url = “https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}” \

6 “&leftTicketDTO.to_station={}&purpose_codes=ADULT”.format(d, f, t)

完整代码


CJYDemo.py

import requests

from hashlib import md5

class CJYClient(object):

def init(self, username, password, soft_id):

self.username = username

self.password = md5(password.encode(‘utf8’)).hexdigest()

self.soft_id = soft_id

self.base_params = {

‘user’: self.username,

‘pass2’: self.password,

‘softid’: self.soft_id,

}

self.headers = {

‘Connection’: ‘Keep-Alive’,

‘User-Agent’: ‘Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)’,

}

def PostPic(self, im, codetype):

“”"

im: 图片字节

codetype: 题目类型 参考 http://www.chaojiying.com/price.html

“”"

params = {

‘codetype’: codetype,

}

params.update(self.base_params)

files = {‘userfile’: (‘ccc.jpg’, im)}

r = requests.post(‘http://upload.chaojiying.net/Upload/Processing.php’, data=params, files=files,

headers=self.headers)

return r.json()

def ReportError(self, im_id):

“”"

im_id:报错题目的图片ID

“”"

params = {

‘id’: im_id,

}

params.update(self.base_params)

r = requests.post(‘http://upload.chaojiying.net/Upload/ReportError.php’, data=params, headers=self.headers)

return r.json()

def use_cjy(filename):

username = “” # 用户名

password = “” # 密码

app_id = “” # 软件ID

cjy = CJYClient(username, password, app_id) # 用户中心>>软件ID

im = open(filename, ‘rb’).read() # 本地图片文件路径

return cjy.PostPic(im, 9004) # 9004->验证码类型

test.py

import json

import requests

from PIL import Image

from time import sleep

from .CJYDemo import use_cjy

from selenium import webdriver

from selenium.webdriver import ActionChains

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

headers = {

“User-Agent”: “Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1”

" Safari/537.1"

}

class TrainUser:

def init(self, username, password):

self.username = username

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Python开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注Python)
img

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

g.cn/img_convert/8c4513c1a906b72cbf93031e6781512b.png)

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值