• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > 用Python抢过年的火车票附源码

用Python抢过年的火车票附源码

作者:mrr 字体:[增加 减小] 来源:互联网

mrr 通过本文主要向大家介绍了python抢火车票,python 火车票,python 火车票查询,火车票订票系统源码,360火车票抢票软件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

前言:大家跟我一起念,Python大法好,跟着本宝宝用Python抢火车票

首先我们需要splinter

安装:

pip install splinter -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

然后还需要一个浏览器的驱动,当然用chrome啦

下载地址:

http://chromedriver.storage.googleapis.com/index.html?path=2.20/

根据下载的自己的电脑系统选择下载包,我的windows就用win32了

解压后直接放到C:\Windows\System32目录下,你当然也可以给这个驱动程序弄个环境变量。

注意:我下的驱动版本是2.19的,根据自己需要下载相应版本,我的2.20版本有报错

首先简单的测试一下吧,推荐ipython代替python自带的交互界面

from splinter.browser import Browser
b = Browser(driver_name="chrome")
b.visit("http://www.baidu.com") ###注意不要去掉http://
</div>

然后牛刀小试一下吧,用百度搜索一些东西。比如splinter
在上面我们已经打开百度的网址了

 然后我们输入一些像搜索的内容吧

由上可以发现,该输入框的name=wd,通过fill似乎只能通过name填充

官方说明: Fill the field identified by ``name`` with the content specified by ``value``.

那就在输入框搜索splinter,当然也可以输入中文,但是最好指定Unicode编码,如u”我”

b.fill("wd","splinter")
</div>

有意思的事,你会发现你都不需要点击“百度一下”就到搜索页面了

但是,如果多次搜索,我们还是需要点击“百度一下”的

下面就不在带着大家找这些元素的id,value什么的了,通过chrome的F12找自己需要的吧

那么把点击栏find出来吧

我们发现,百度搜索栏的value=”百度一下”,id=”su”

所以把这个按钮提取出来

button = b.find_by_value(u"百度一下")
或者
button = b.find_by_id(u"su")
</div>

怎么点击呢?简单如下

button.click()
</div>

这有什么用?

我们找找页面里有没有我想找的东西吧,比如找找有没有这个地址“splinter.cobrateam.info”

b.is_text_present("splinter.cobrateam.info")

</div>

如果该页面存在,则返回True,反之亦然

怎么退出呢?

b.quit()
</div>

好吧,上面就是参照官方文档写的一个简单的入门教程了,下面我们进入正题吧~~~
个人是觉得授人以鱼不如授人以渔的,所以我尽量讲解所有的内容,而非发个代码,让大家copy一下,然后不求甚解。
值得注意的是,我不会去说什么怎么破解验证码以及有什么漏洞可以利用什么的,抢过票的都知道,快一点是一点,而我要做的是就能将机器能做的交给机器做,比如点击,查询,选择等,所以希望必中的还是绕过此文吧。笔者水平也就这么一点点。

首先我们用ipython讲解一下思路

开始当然是导入啦。。

from splinter.browser import Browser
b = Browser(driver_name="chrome")
url = “https://kyfw.12306.cn/otn/leftTicket/init”
b = Browser(driver_name="chrome")
b.visit(url)
</div>

第一步手动登陆,能通过下面的代码填充表单,但是我跳不过验证码,暂时没有精力去研究那东西,多多见谅,所以还是等手动选择验证码的。

b.find_by_text(u"登录").click()
 b.fill("loginUserDTO.user_name","xxxx")
b.fill("userDTO.password","xxxx")
</div>

第二部选择出发地点日期等

通过cookies选择出发地点,日期及目的地

首先瞧瞧我们的cookies当然是没有的出发日期什么的

至于你的出发地点及目的地对于的cookies值是什么,就得靠自己去copy了,我帮不了

 

怎么有的这些值?

先将地点日期输进去查询一下,然后chrome按F12  找到这一部分即可

打开浏览器跳到这个页面当然是没有我们需要的信息的,比如下面这样

b.cookies.all()
{u'BIGipServerotn': u'1977155850.38945.0000',
 u'JSESSIONID': u'0A01D97598F459F751C4AE8518DBFB300DA7001B67',
 u'__NRF': u'95D48FC2E0E15920BFB61C7A330FF2AE',
 u'current_captcha_type': u'Z'}
</div>

然后我们需要添加出发地,这个得自己去查了,是简单的url加密

b.cookies.add({"_jc_save_fromStation":"%u4E0A%u6D77%2CSHH"})

</div>

添加出发日期

b.cookies.add({"_jc_save_fromDate":"2016-01-20"})

</div>

添加目的地

b.cookies.add({u'_jc_save_toStation':'%u6C38%u5DDE%2CAOQ'})

</div>

注:如果是修改的话,还是调用add方法,如果传入的字典key值已存在则替换

比如,将目的地改为其他地方xxxx,如下即可

b.cookies.add({u'_jc_save_toStation':'xxxxxx'})
</div>

然后在看看现在的cookies值

b.cookies.all()
{u'BIGipServerotn': u'1977155850.38945.0000',
 u'JSESSIONID': u'0A01D97598F459F751C4AE8518DBFB300DA7001B67',
 u'__NRF': u'95D48FC2E0E15920BFB61C7A330FF2AE',
 u'_jc_save_fromDate': u'2016-01-20',
 u'_jc_save_fromStation': u'%u4E0A%u6D77%2CSHH',
 u'_jc_save_toStation': u'%u6C38%u5DDE%2CAOQ',
 u'current_captcha_type': u'Z'}
</div>

既然cookies已经准备完毕,reload一下,开始查询吧

b.reload()
b.find_by_text(u"查询").click()

</div>

是不是发现,地点日期都填上了,很酷有木有

到这一步我们得确认的是,自己已经登录了。一切准备就绪了,就可以刷票了。
值得说明的是,上面的步骤都能手工完成。

下面我们需要用组合BeautifulSoup来判断预订可不可以点,当然你也可以选择单点某一趟

反正我只想买高铁的,既然这样,下面两种方法,一是单点一趟,而是轮循着点很多趟,不放过任何机会。

先说第一个方法吧,这个比较简单,不需要用到其他库,单用splinter就够了,就先从简单的说起吧。

 

从我自己坐的火车线路来看,一共六趟,我只想做高铁,那么我一直点高铁的那一趟预订是不是就够了,当然是!!
一共六个预订,我的预订在第二个,索引值自然在1了啦。(会python的不会问我为什么的吧!!!)

b.find_by_text(u"预订")[1].click()

</div>

然后如果预订成功

应该跳转到选择乘客的位置,

我们就需要按需选择乘客了

 b.find_by_text
  


 

您可能想查找下面的文章:

  • 用Python抢过年的火车票附源码
  • 用Python抢过年的火车票附源码
  • python实现的一个火车票转让信息采集器
  • python实现的一个火车票转让信息采集器

相关文章

  • python中将字典转换成其json字符串
  • Python变量和字符串详解
  • Python脚本实现DNSPod DNS动态解析域名
  • python函数形参用法实例分析
  • 栈和队列数据结构的基本概念及其相关的Python实现
  • 在Heroku云平台上部署Python的Django框架的教程
  • python实现汉诺塔递归算法经典案例
  • python网络编程示例(客户端与服务端)
  • 在Django的通用视图中处理Context的方法
  • python动态文本进度条的实例代码

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • python实现的登录和操作开心网脚本分享
    • python生成式的send()方法(详解)
    • Python的requests网络编程包使用教程
    • Python实现随机生成任意数量车牌号
    • python多线程编程方式分析示例详解
    • python 算法 排序实现快速排序
    • python list转dict示例分享
    • Python3基础之函数用法
    • 将图片文件嵌入到wxpython代码中的实现方法
    • 详解Python中的array数组模块相关使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有