通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

python12306如何下单

python12306如何下单

Python12306的下单步骤包括模拟登录、查询车票、提交订单、支付订单,其中最重要的一步是模拟登录。

一、模拟登录

模拟登录是整个流程的关键步骤,它涉及到对12306网站的账号密码验证。首先需要准备好Python的第三方库,如requests和BeautifulSoup。

  1. 获取验证码:12306网站采用了图形验证码,首先需要获取验证码图片并手动识别,或使用图像识别技术。
  2. 登录请求:将用户名、密码和验证码一并发送到12306的登录接口,获取登录成功后的cookies。

import requests

from PIL import Image

获取验证码

session = requests.Session()

captcha_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image'

response = session.get(captcha_url)

with open('captcha.jpg', 'wb') as f:

f.write(response.content)

手动识别验证码

Image.open('captcha.jpg').show()

captcha_solution = input('请输入验证码: ')

登录请求

login_url = 'https://kyfw.12306.cn/passport/web/login'

data = {

'username': '你的账号',

'password': '你的密码',

'captcha': captcha_solution

}

response = session.post(login_url, data=data)

二、查询车票

登录成功后,接下来就是查询车票。需要提供出发地、目的地、出发日期等信息。

query_url = 'https://kyfw.12306.cn/otn/leftTicket/query'

params = {

'leftTicketDTO.train_date': '2023-11-01',

'leftTicketDTO.from_station': 'BJP',

'leftTicketDTO.to_station': 'SHH',

'purpose_codes': 'ADULT'

}

response = session.get(query_url, params=params)

trains = response.json()['data']['result']

三、提交订单

在查询到车票后,可以提交订单。这里需要选择具体的车次和席别。

order_url = 'https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest'

data = {

'secretStr': '车次信息加密串',

'train_date': '2023-11-01',

'back_train_date': '2023-11-01',

'tour_flag': 'dc',

'purpose_codes': 'ADULT',

'query_from_station_name': '北京',

'query_to_station_name': '上海',

'undefined': ''

}

response = session.post(order_url, data=data)

四、支付订单

最后一步是支付订单,这一步需要跳转到支付页面进行支付。

payment_url = 'https://kyfw.12306.cn/otn/payOrder/init'

response = session.post(payment_url, data={})

跳转到支付页面进行支付

详细描述模拟登录

模拟登录是关键的一步,因为12306网站对用户的登录验证非常严格。模拟登录不仅涉及到账号密码,还需要处理验证码,这是一个复杂且重要的环节。

验证码处理:12306网站的验证码是图形验证码,这就需要手动识别或者使用图像识别技术来自动识别。手动识别虽然麻烦,但对于个人用户是比较实际的选择。如果是批量操作,可以考虑使用图像识别技术,比如TensorFlow等深度学习框架。

会话保持:在登录成功后,需要保持会话状态。使用requests库时,可以通过Session对象来保持会话状态,这样在后续的请求中就不需要重新登录。

异常处理:在模拟登录过程中,可能会遇到各种异常情况,比如验证码识别错误、账号密码错误等。需要对这些异常情况进行处理,以提高程序的鲁棒性。

import requests

from PIL import Image

def get_captcha(session):

captcha_url = 'https://kyfw.12306.cn/passport/captcha/captcha-image'

response = session.get(captcha_url)

with open('captcha.jpg', 'wb') as f:

f.write(response.content)

Image.open('captcha.jpg').show()

return input('请输入验证码: ')

def login(session, username, password):

captcha_solution = get_captcha(session)

login_url = 'https://kyfw.12306.cn/passport/web/login'

data = {

'username': username,

'password': password,

'captcha': captcha_solution

}

response = session.post(login_url, data=data)

if response.json().get('result_code') == 0:

print('登录成功')

else:

print('登录失败')

session = requests.Session()

login(session, '你的账号', '你的密码')

结语

通过上述步骤,基本上可以实现利用Python进行12306的自动下单。每一步都有其复杂性和技术要求,特别是模拟登录,需要对验证码处理和会话保持有深入的理解。希望这篇文章对你有所帮助。

相关问答FAQs:

如何使用Python12306进行火车票查询?
Python12306可以帮助用户通过代码实现火车票的查询功能。用户需要先安装相关的依赖库,接着使用API接口获取车次信息、余票信息等。具体步骤包括导入库、创建会话、发送请求和解析响应数据等。通过这些步骤,用户能够快速获取到所需的火车票信息。

在Python12306中,如何实现自动登录功能?
实现自动登录功能需要用户提供账号和密码,并在代码中配置登录请求。用户可以使用Python的requests库来模拟登录过程,同时需要处理验证码的识别。通过合理的算法,用户能够实现自动化登录,节省时间。

使用Python12306下单时,如何处理订单失败的情况?
在下单过程中,可能会遇到订单失败的情况。用户可以通过捕获异常和重试机制来应对这些问题。建议在下单时设置合理的重试次数,并在每次失败后记录错误信息,以便于后续分析。通过这种方式,用户能够提高成功下单的概率。

相关文章