讲解“100行Python代码实现自动抢火车票(附源码)”的完整攻略如下:
项目简介
该项目是一个基于Python的火车票抢购脚本,仅需100行代码便可实现自动购票。
必备工具
- Python 3.x
- Chrome浏览器
- Chrome浏览器对应版本的chromedriver
项目代码架构
import datetime
from splinter.browser import Browser
# 填写抢票人信息
passengers = []
# 填写购票车次信息
trains = []
# 填写抢票日期信息
d = datetime.datetime()
# 填写浏览器驱动路径和浏览器信息
executable_path = {'executable_path': 'chromedriver路径'}
browser = Browser('chrome', **executable_path)
# 自动登录
def login():
pass
# 填充查询余票信息
def fill_in_query_info():
pass
# 抢票主程序
def main():
while True:
pass
# 运行主程序
if __name__ == '__main__':
login()
fill_in_query_info()
main()
详细步骤
1.设置抢票人信息
在代码中填写购票人的姓名、证件类型以及证件号码等信息,代码如下:
# 填写抢票人信息
passengers = [
{
'姓名': 'XXX',
'证件类型': '',
'证件号码': '',
'手机号码': ''
}
]
2.设置购票车次信息
在代码中填写购票车次信息,包括车次代码、出发站点、到达站点、座位类型和乘车人等信息,代码如下:
# 填写购票车次信息,如下示例为G101次、北京到上海、二等座、1人
trains = [
{
'车次': 'G101',
'出发站点': '北京',
'到达站点': '上海',
'座位类型': '二等座',
'乘车人': 'XXX'
}
]
3.设置抢票日期信息
在代码中填写抢票日期信息,包括出发日期和返程日期等信息,代码如下:
# 填写抢票日期信息
d = datetime.datetime(2019, 11, 11)
4.设置浏览器驱动路径和浏览器信息
在代码中填写浏览器驱动路径和浏览器信息,代码如下:
# 填写浏览器驱动路径和浏览器信息
executable_path = {'executable_path': 'chromedriver路径'}
browser = Browser('chrome', **executable_path)
5.自动登录
在代码中实现自动登录功能,代码如下:
# 自动登录
def login():
login_url = 'https://kyfw.12306.cn/otn/resources/login.html'
browser.visit(login_url)
browser.fill('username', 'xxx') # 填写用户名
browser.fill('password', 'xxx') # 填写密码
login_btn = browser.find_by_text('登录').first
login_btn.click()
6.填充查询余票信息
在代码中实现填充查询余票信息功能,代码如下:
# 填充查询余票信息
def fill_in_query_info():
query_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
browser.visit(query_url)
browser.fill('leftTicketDTO.train_date', d.strftime('%Y-%m-%d')) # 填写出发日期
browser.select('leftTicketDTO.from_station', '北京') # 填写出发站点
browser.select('leftTicketDTO.to_station', '上海') # 填写到达站点
browser.find_by_text('查询').first.click()
7.抢票主程序
在代码中实现抢票主程序,代码如下:
# 抢票主程序
def main():
while True:
# 判断是否到达预期抢票时间
# 获取车票信息
# 分析车票信息,挑选符合条件的车次
# 进入预订页面
# 填充订票人信息
# 确认购票信息
8.运行主程序
在代码中运行主程序,代码如下:
# 运行主程序
if __name__ == '__main__':
login()
fill_in_query_info()
main()
示例
示例1:查询指定车次余票
如果想要查询指定车次的余票信息,可以在 fill_in_query_info()
函数中添加如下代码:
# 填充查询余票信息
def fill_in_query_info():
query_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
browser.visit(query_url)
browser.fill('leftTicketDTO.train_date', d.strftime('%Y-%m-%d')) # 填写出发日期
browser.select('leftTicketDTO.from_station', '北京') # 填写出发站点
browser.select('leftTicketDTO.to_station', '上海') # 填写到达站点
browser.find_by_text('查询').first.click()
result_table = browser.find_by_id('queryLeftTable').first # 获取查询结果表格
rows = result_table.find_by_text('G101') # 获取车次为G101的信息
for row in rows:
print(row.text) # 输出车次为G101的余票信息
示例2:自动填充订票人信息
在代码中实现自动填充订票人信息功能,代码如下:
# 进入预订页面
def go_to_book_page(browser, url):
browser.visit(url)
order_btn = browser.find_by_text('预订').first
order_btn.click()
# 填充订票人信息
def fill_in_order_info(browser):
for passenger in passengers:
browser.find_by_text(passenger['姓名']).last.click()
passenger_type_option = browser.find_by_text(passenger['证件类型']).last
passenger_type_option['value'] = passenger_type_option.text
browser.execute_script("$('#" + passenger_type_option['id'] + "').trigger('change')")
browser.fill('passenger_0_name', passenger['姓名'])
browser.select('passenger_0_cardtype', passenger['证件类型'])
browser.fill('passenger_0_cardno', passenger['证件号码'])
browser.select('passenger_0_mobileno', passenger['手机号码'])
将上述两个函数添加到 main()
函数中,代码如下:
# 抢票主程序
def main():
while True:
# 判断是否到达预期抢票时间
# 获取车票信息
# 分析车票信息,挑选符合条件的车次
# 进入预订页面
for t in trains:
go_to_book_page(browser, t['预订页面链接'])
fill_in_order_info(browser)
submit_btn = browser.find_by_text('提交订单').first
submit_btn.click()
confirm_btn = browser.find_by_text('确认').first
confirm_btn.click()
这样,程序就会自动填充每个订票人的信息,方便快捷。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:100行Python代码实现自动抢火车票(附源码) - Python技术站