Giter VIP home page Giter VIP logo

ccckdi / 12306-ticket-grabbing Goto Github PK

View Code? Open in Web Editor NEW

This project forked from 0he1/12306-ticket-grabbing

0.0 0.0 0.0 6.22 MB

12306抢票小爬虫。本项目基于selenium实现了12306的自动登录抢票,可自动过滑动验证码,自动查询车票是否开售,一旦放票可以自动选票并提交订单,可以选学生票,你只需在10分钟内支付即可。

Python 100.00%

12306-ticket-grabbing's Introduction

功能

本项目实现了12306火车抢票系统的自动登录,可自动过滑动验证码,自动查询车票是否开售,一旦放票可以自动选票并提交订单,可以选学生票,你只需在10分钟内支付即可。需要注意的是该程序要在放票前几分钟运行,要不然票都被抢光了再运行神仙也抢不到。

环境

本项目测试环境:win10,python3,selenium > 4.0,chrome = 104,pycharm,chromedriver.exe = 104

chromedriver.exe版本为104,可以根据自己电脑浏览器版本重新下载chromedriver.exe替换

chromedriver.exe下载地址:http://chromedriver.storage.googleapis.com/index.htm

账号密码与车票信息

提前在config.py中填写好

class Config:
    def __init__(self):
        # 账号
        self.username = '#########'
        # 密码  每3天12306就会强制要求修改一次密码才能使用账号密码登录
        self.password = '#########'
        # 出发地 一定要写清楚 比如:北京西站就要写北京西站,不要只写北京
        self.fromstation = '#########'
        # 目的地 一定要写清楚 比如:郑州西站就要写郑州西站,不要只写郑州
        self.destination = '#########'
        # 出发日期,格式一定要是这样:2022-08-17
        self.date = '#########'
        # 车次   例如Z146,G127
        self.trainnumber = '#########'

说明

提前根据自身要求修改好代码,然后找一个已经能预订的车票测试一下该程序能否帮你抢到合适的票,再用它去抢票

程序默认抢的是硬卧(使用硬卧是否为候补来判断是否有票),如果要抢其他类型的车票例如硬座请修改value=//td[8]value=//td[10]

并且该段代码能保证即使同一车次的列车既经过郑州,又经过郑州西,选出来的车票仍是唯一的你想要的那张

# 车票出发站
start_station = str(ticket.text).replace("复\n", "").replace("智\n", "").split('\n')[1]
# 车票到达站
arrival_station = str(ticket.text).replace("复\n", "").replace("智\n", "").split('\n')[2]
# 如果车票的车次等于想要的车次并且车票的出发站等于您的出发站,到达站等于您的到达站并且硬卧的状态不是候补则点击预订,这样可使得车票唯一
 # value = '//td[2]'表示商务座特等座,'//td[3]'表示一等座,'//td[4]'表示二等座,'//td[5]'表示高级软卧,'//td[6]'表示软卧 ,'//td[7]'表示动卧,'//td[8]'表示硬卧,'//td[9]'表示软座,td[10]表示硬座
if ticket.find_element(by=By.CLASS_NAME,value='number').text == conf.trainnumber and start_station == conf.fromstation and arrival_station == conf.destination and ticket.find_element(by=By.XPATH, value='//td[8]').text != "候补":

下面是选择乘车人,如果不是学生就把driver.find_element(by=By.XPATH, value='//*[@id="dialog_xsertcj_ok"]').click()注释掉即可

# 选择乘车人,如果是学生,则需要确认购买学生票
driver.find_element(by=By.XPATH, value='//*[@id="normalPassenger_0"]').click()
# 点击确认购买学生票,如果不是学生,把这行注释了就行
driver.find_element(by=By.XPATH, value='//*[@id="dialog_xsertcj_ok"]').click()
# 第二个乘车人
# driver.find_element(by=By.XPATH, value='//*[@id="normalPassenger_1"]').click()
# 如果第二个乘车人也是学生,则需要点击确认第二个人也购买学生票
# driver.find_element(by=By.XPATH, value='//*[@id="dialog_xsertcj_ok"]').click()

12306的系统只支持支持C、D、G字头的动车组列车选座

如果抢的是硬座并想要选座,把注释解开即可(由于12306网站规则变化,该方法已不能成功选座了,代码中已删除)

# 选座  F座
# driver.find_element(by=By.ID, value='1F').click()
# 第二个人选座
# driver.find_element(by=By.ID, value='2D').click()

要想选座,可以解开下面代码的注释

# 等待1秒,才能获取座位(最好不要删掉,否则好像选座会出问题)
# time.sleep(1)
# 选座  A座:'1A',B座:'1B',C座:'1C',D座:'1D',E座:'1E',F座:'1F'
# driver.execute_script('document.getElementById("1F").click()')
# 第二个人选座  A座:'2A',B座:'2B',C座:'2C',D座:'2D',E座:'2E',F座:'2F'
# driver.execute_script('document.getElementById("1F").click()')

博客:https://blog.csdn.net/m0_57110410/article/details/126257160

12306-ticket-grabbing's People

Contributors

michistalin avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.