火车票抢票代码公开揭秘
火车票抢票代码公开揭秘
闵开慧 发表于2天前
火车票抢票代码公开揭秘
  • 发表于 2天前
  • 阅读 4077
  • 收藏 103
  • 点赞 7
  • 评论 22
标题:腾讯云 新注册用户域名抢购1元起>>>   
摘要: 火车票抢票代码公开揭秘

火车票抢票代码公开揭秘

市场上很多火车票抢票yahu999大家应该非常熟悉,但很少有人研究具体是怎么实现的,所以觉得很神秘,其实很简单。下面使用Python模拟抢票程序,给大家揭秘抢票到底是怎么回事。 该代码仅供参考,主要用于大家沟通交流,禁止用于商业用途。 具体代码如下,可以修改成自己的12306用户名账号: # -*- coding: utf-8 -*- """ @author: liuyw """ from splinter.browser import Browser from time import sleep import traceback import time, sys class huoche(object): """docstring for huoche""" driver_name='' executable_path='' #用户名,密码 username = u"xxx@qq.com" passwd = u"xxxx" # cookies值得自己去找, 下面两个分别是上海, 太原南 starts = u"%u4E0A%u6D77%2CSHH" ends = u"%u592A%u539F%2CTYV" # 时间格式2018-01-19 dtime = u"2018-01-19" # 车次,选择第几趟,0则从上之下依次点击 order = 0 ###乘客名 users = [u"xxx",u"xxx"] ##席位 xb = u"二等座" pz=u"成人票" """网址""" ticket_url = "https://kyfw.12306.cn/otn/leftTicket/init" login_url = "https://kyfw.12306.cn/otn/login/init" initmy_url = "https://kyfw.12306.cn/otn/index/initMy12306" buy="https://kyfw.12306.cn/otn/confirmPassenger/initDc" login_url='https://kyfw.12306.cn/otn/login/init' def __init__(self): self.driver_name='chrome' self.executable_path='/usr/local/bin/chromedriver' def login(self): self.driver.visit(self.login_url) self.driver.fill("loginUserDTO.user_name", self.username) # sleep(1) self.driver.fill("userDTO.password", self.passwd) print u"等待验证码,自行输入..." while True: if self.driver.url != self.initmy_url: sleep(1) else: break def start(self): self.driver=Browser(driver_name=self.driver_name,executable_path=self.executable_path) self.driver.driver.set_window_size(1400, 1000) self.login() # sleep(1) self.driver.visit(self.ticket_url) try: print u"购票页面开始..." # sleep(1) # 加载查询信息 self.driver.cookies.add({"_jc_save_fromStation": self.starts}) self.driver.cookies.add({"_jc_save_toStation": self.ends}) self.driver.cookies.add({"_jc_save_fromDate": self.dtime}) self.driver.reload() count=0 if self.order!=0: while self.driver.url==self.ticket_url: self.driver.find_by_text(u"查询").click() count += 1 print u"循环点击查询... 第 %s 次" % count # sleep(1) try: self.driver.find_by_text(u"预订")[self.order - 1].click() except Exception as e: print e print u"还没开始预订" continue else: while self.driver.url == self.ticket_url: self.driver.find_by_text(u"查询").click() count += 1 print u"循环点击查询... 第 %s 次" % count # sleep(0.8) try: for i in self.driver.find_by_text(u"预订"): i.click() sleep(1) except Exception as e: print e print u"还没开始预订 %s" %count continue print u"开始预订..." # sleep(3) # self.driver.reload() sleep(1) print u'开始选择用户...' for user in self.users: self.driver.find_by_text(user).last.click() print u"提交订单..." sleep(1) # self.driver.find_by_text(self.pz).click() # self.driver.find_by_id('').select(self.pz) # # sleep(1) # self.driver.find_by_text(self.xb).click() # sleep(1) self.driver.find_by_id('submitOrder_id').click() # print u"开始选座..." # self.driver.find_by_id('1D').last.click() # self.driver.find_by_id('1F').last.click() sleep(1.5) print u"确认选座..." self.driver.find_by_id('qr_submit_id').click() except Exception as e: print e if __name__ == '__main__': huoche=huoche() huoche.start()  
共有 人打赏支持
粉丝 324
博文 601
码字总数 267156
评论 (22)
大连馋师
Python 程序员,有前途的说~
闵开慧

引用来自“大连馋师”的评论

Python 程序员,有前途的说~
这个代码只是用python写的,其它语言也可以实现,原理是一样的。
pdwjun
这个根本谈不上抢票,只是购票而已
闵开慧

引用来自“pdwjun”的评论

这个根本谈不上抢票,只是购票而已
你运行一下就知道了,这是可以直接运行的真实程序。
BoXuan
抢票程序的难点应该是图形验证码的分析匹配,你这个应该没有吧,12306的图形验证码好像是根据线路的紧俏程度来区分有无验证码的,繁忙的线路图形验证码我们肉眼有时都难以辨认。
Robinlblb
LZ,哪有splinter,traceback模块?
这程序3.6的少了splinter,traceback运行不了啊
爆炸的榴莲
等待验证码,自行输入... 这也叫抢票,,完全避过了难点啊,,,你这只能是购票
Zoker
看到评论我就呵呵了,楼主加油。
amita
感谢分享。以前用selenium写过,看来splinter写起来更清爽
flydo
现在是选择图片校验验证码,不是手输了。
肖特基在漏电
感谢楼主。

席位那里注释掉了我没发现,一不留神就给我抢了一张36小时的无座。
web实习虫
给你个思路强行pass验证码:
验证码是一张图片,根据图片的坐标来确定范围,宽度高度为一组,比如 第一张第五章就是 20,20,20,140 这样
那么可以随机生成几组验证码坐标,while循环内我测试的通过率很高。
qtfreet00
还好我有验证码识别
cyclamenkde
2.7版的吧
风里的叶子
只是模拟页面事件而已, 都不算真正的抢票....
OSC_pmmGIn
咋用啊
astars
首先你得在LINUX上面运行(self.executable_path='/usr/local/bin/chromedriver')
然后在LINUX要安装chrome浏览器(Browser(driver_name=self.driver_name,executable_path=self.executable_path))
最后运行的时候各种调错吧,因为在你与直接COPY代码后,运行脚本,发现有些包你可以没有
最后的最后:注成功:joy:
简单有效
其实就做个chrome插件, 插件里面发送ajax请求就搞定了,
觉得烦死
网页版的接口好抓 APP的不好抓 有app的就好了
感觉12306app抢票几率大些
卧龙大熊猫
标题党
×
闵开慧
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: