首页 > 编程语言 >12306抢票-python

12306抢票-python

时间:2024-10-23 22:22:02浏览次数:3  
标签:python 抢票 driver value element 12306 sleep ID find

写了一整天,代码设置起始站,终点站,出行日期,通过爬虫从12306爬取选择当日的车票信息,保存在csv文件中,随后通过邮箱将包含车次信息的csv文件发送到个人邮箱账号,个人阅读后回发一个邮件,期间包含车次信息,电脑进入邮箱读取邮件,获得所选车次,进行自动化订票,期间需要输入一次验证码,目前是控制台输入,也可以邮箱发送给电脑,这样就可以远程订票了。

部分代码

# 提取数据+保存为csv
def request_csv():
    response = requests.get(url=url, headers=headers)
    response.encoding = 'utf8'
    data_json = response.json()
    #提取+保存
    f = open('dic_12306.csv','w',encoding='utf-8',newline='')
    csv_writer = csv.writer(f)
    csv_writer.writerow(dic_12306.keys())
    result = data_json['data']['result']
    for i in result:
        index = i.split('|')
        dic_12306['车次'] = index[3]
        dic_12306['出发时间'] = index[8]#出发时间
        dic_12306['到达时间'] = index[9]#到达时间
        dic_12306['消耗时间'] = index[10]#消耗时间
        dic_12306['头等座'] = index[32]#头等座
        dic_12306['一等座'] = index[31]#一等座
        dic_12306['二等座'] = index[30]#二等座
        dic_12306['硬卧'] = index[28]#硬卧
        dic_12306['硬座'] = index[29]#硬座
        dic_12306['无座'] = index[26]#无座
        dic_12306['软卧'] = index[23]#软卧
        csv_writer.writerow(dic_12306.values())
    f.close()
    response.close()
    return ''
# 购票
def buy_card(index):
    # 打开浏览器,正确的实例化方式是使用括号
    driver = webdriver.Edge()  # 注意这里的括号
    # 最大化
    driver.maximize_window()
    # number = input('请输入手机号')
    # pass_word = input('请输入密码')
    # id_card = input('请输入身份证后四位')
    # 访问网站
    driver.get(url='https://kyfw.12306.cn/otn/leftTicket/init')
    sleep(2)
    # # 输入出发地
    # # 先找到出发地输入框
    driver.find_element(by='id', value='fromStationText').click()
    sleep(0.5)
    driver.find_element(by='id', value='fromStationText').clear()
    sleep(0.5)
    driver.find_element(by='id', value='fromStationText').send_keys('葫芦岛北')
    sleep(0.5)
    driver.find_element(by='id', value='fromStationText').send_keys(Keys.ENTER)
    # 目的地
    driver.find_element(by='id', value='toStationText').click()
    sleep(0.5)
    driver.find_element(by='id', value='toStationText').clear()
    sleep(0.5)
    driver.find_element(by='id', value='toStationText').send_keys('沈阳')
    sleep(0.5)
    driver.find_element(by='id', value='toStationText').send_keys(Keys.ENTER)
    # 日期
    driver.find_element(By.ID, value='train_date').click()
    sleep(0.5)
    driver.find_element(By.ID, value='train_date').clear()
    sleep(0.5)
    driver.find_element(By.ID, value='train_date').send_keys('2024-10-27')
    sleep(0.5)
    driver.find_element(By.ID, value='train_date').send_keys(Keys.ENTER)
    # 查询
    driver.find_element(By.ID, value='query_ticket').click()
    sleep(5)
    # 点击预订
    driver.find_element(By.XPATH, f'//*[@id="queryLeftTable"]/tr[{index}]/td[@class="no-br"]/a').click()
    sleep(2)
    # 登录
    driver.find_element(By.ID, value='J-userName').click()  # 手机号
    driver.find_element(By.ID, value='J-userName').clear()
    driver.find_element(By.ID, value='J-userName').send_keys(number)
    driver.find_element(By.ID, value='J-userName').send_keys(Keys.ENTER)
    sleep(0.5)
    driver.find_element(By.ID, value='J-password').click()  # 密码
    driver.find_element(By.ID, value='J-password').clear()
    driver.find_element(By.ID, value='J-password').send_keys(pass_word)
    driver.find_element(By.ID, value='J-password').send_keys(Keys.ENTER)
    sleep(0.5)
    # 立即登录
    driver.find_element(By.ID, value='J-login').click()
    sleep(2)
    # 输入身份证号后四位
    driver.find_element(By.ID, value='id_card').click()  # 密码
    driver.find_element(By.ID, value='id_card').clear()
    driver.find_element(By.ID, value='id_card').send_keys(id_card)
    driver.find_element(By.ID, value='id_card').send_keys(Keys.ENTER)
    sleep(0.5)
    # 获取验证码
    driver.find_element(By.ID, value='verification_code').click()
    sleep(2)
    # 输入验证码
    code = input('输入验证码')
    driver.find_element(By.ID, value='code').click()  # 输入验证码
    driver.find_element(By.ID, value='code').send_keys(code)
    driver.find_element(By.ID, value='code').send_keys(Keys.ENTER)
    sleep(2)
    # 确定
    driver.find_element(By.ID, value='sureClick').click()  # 输入验证码
    sleep(2)
    # 选择乘车人
    driver.find_element(By.ID, value='normalPassenger_0').click()
    sleep(2)
    # 选择是否学生票
    # select_ = input('选择是否为学生票:')
    if select_ == '否':
        driver.find_element(By.ID, value='dialog_xsertcj_cancel').click()
    elif select_ == '是':
        driver.find_element(By.ID, value='dialog_xsertcj_ok').click()
    sleep(2)
    # 提交订单
    driver.find_element(By.ID, value='submitOrder_id').click()
    sleep(2)
    # 确认信息
    driver.find_element(By.ID, value='qr_submit_id').click()
    sleep(2)
    # 是否确认购买
    # y_or_no = input('是否确认购买:')
    if y_or_no == '是':
        driver.find_element(By.ID, value='qr_submit_id').click()
    elif y_or_no == '否':
        driver.find_element(By.ID, value='back_edit_id').click()
    print('购买成功')
    driver.close()
if __name__ == "__main__":
    # #输入起始站
    # start_station = input('请输入起始站:')
    # # 输入终点站
    # end_station = input('请输入终点站:')
    #爬取数据
    request_csv()
    print('爬取完成')
    #发送爬取的csv文件到邮箱
    print('开始发送数据')
    send_phone()
    print('发送完毕')
    #打开邮箱读取主题部分

    num = get_email()
            # break
    #根据索引寻找对应的车次
    buy_card(2*(num+1)-1)

运行结果:

标签:python,抢票,driver,value,element,12306,sleep,ID,find
From: https://blog.csdn.net/chu_kuang_/article/details/143195036

相关文章

  • python基于django的校园论坛交流表白墙系统
    目录项目介绍具体实现截图预期达到的目标技术栈编码规范开发技术介绍系统的稳定性和可维护性论文大纲目录核心代码部分展示详细视频演示源码获取方式项目介绍该校园系统主要是来服务与学校内各个职务人员,不管是学生还是老师还是其他在校职工,都可以通过这个平台来进......
  • AtCoder Beginner Contest 375 C题 (python解)
    PanasonicProgrammingContest2024(AtCoderBeginnerContest375)C-SpiralRotation(python解)**原题链接:[(https://atcoder.jp/contests/abc375/tasks/abc375_c)]题目简述:这道题要求对一个NxN的网格进行特定的螺旋旋转操作,而这个N总是偶数。在这里,网格中的每个单元......
  • Python多进程学习与使用:全面指南
    Python多进程学习与使用:全面指南目录引言什么是多进程?为什么使用多进程?Python中的多进程模块:multiprocessing创建进程的基本方法进程间通信进程池多进程与多线程的比较常见问题和解决方案最佳实践和性能优化实战项目:多进程文件处理系统总结引言在当今的计算环境中,充分利......
  • python pdf 转图片
    1.需要安装requests,PyMuPDF依赖pipinstallrequests,PyMuPDF。可以通过定义的缩放因子和旋转因子去缩放图片和旋转。#!/usr/bin/envpython3#-*-coding:utf-8-*-importdatetimeimportosimportrequestsimportfitz#fitz就是pipinstallPyMuPDFheaders......
  • Python——量化交易的得力助手
    在当今的金融领域,量化交易正逐渐成为一种重要的交易方式。而在众多编程语言中,Python似乎成为了量化交易的首选,今天我们总结下在量化交易中Python常用的的库和工具。数据处理与分析1.Pandas:这是一个用于数据处理和分析的强大库。在量化交易中,它可以用来读取、清洗和处......
  • PYTHON处理时间数据
    目录模块简介1.datetime模块2.pandas库操作示例datetime模块pandas处理时间序列dateutil解析时间在Python中处理时间数据,你可以使用标准库中的datetime模块,或者使用第三方库如pandas和dateutil。模块简介在Python中处理时间数据,通常会用到datetime模块和pandas库。以下是......
  • 《Python游戏编程入门》注-第3章2
    《Python游戏编程入门》的“3.2.2获取用户输入”部分介绍了input()函数的用法;“3.2.3异常处理”部分介绍了try...except语句的用法。1input()函数的用法input()函数用于接受用户的输入,该函数的参数可以在等待用户输入之前显示文本。该函数主要有两种用法:第一个是将当前程......
  • 《Python游戏编程入门》注-第3章1
    《Python游戏编程入门》的第三章是“I/O、数据和字体:Trivia游戏”,介绍了print()函数、input()函数、异常处理以及文件的输入输出,最后根据以上内容完成了Trivia游戏。本章的“3.1了解Trivia游戏”介绍了Trivia游戏的界面和玩法。“3.2Python数据类型”中讲解了print()函数、i......
  • 基于卷积神经网络的瓶盖状态识别系统,resnet50,mobilenet模型【pytorch框架+python源码
    更多目标检测和图像分类识别项目可看我主页其他文章功能演示:卷积神经网络,瓶盖状态识别系统,resnet50,mobilenet【pytorch框架,python】_哔哩哔哩_bilibili(一)简介基于卷积神经网络的瓶盖状态识别系统是在pytorch框架下实现的,这是一个完整的项目,包括代码,数据集,训练好的模型权重,......
  • flask+python+html+mongodb
     python运行此文件,跳转到index.htmlfromflaskimportFlask,render_template,request,jsonify,json,url_for,redirectapp=Flask(__name__)@app.route('/',methods=['GET','POST'])defindex():returnrender_template('index.......