php写抢票脚本,火车票抢票python代码公开揭秘!

市场上很多火车票抢票软件大家应该非常熟悉,但很少有人研究具体是怎么实现的,所以觉得很神秘,其实很简单。下面使用Python模拟抢票程序,给大家揭秘抢票到底是怎么回事。

该代码仅供参考,主要用于大家沟通交流,禁止用于商业用途。

具体代码如下,可以修改成自己的12306用户名账号:

# -*- coding: utf-8 -*-

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"

starts = u"%u4E0A%u6D77%2CSHH"

ends = u"%u592A%u539F%2CTYV"

dtime = u"2018-01-19"

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"

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"购票页面开始..."

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"循环点击查询..." % 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"循环点击查询..." % 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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。 ad51e517755f8fd6a7ec83ced4ecfaf3.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代理模式——HeadFirst设计模式学习笔记

代理模式:为另一个对象提供一个替身或占位符控制这个对象的访问 特点: 让代理对象控制对象的访问,被代理对象可以是远程对象(远程代理),创建开销较大对象(虚拟代理),或需…

cursor用法java,Cursor的基本使用方法

Cursor的基本使用方法今天在用到Cursor的时候发现,有很多游标相关的知识还是有欠缺,在网上搜了篇基础讲解的文,觉得还不错,自己整理了一下发上来。虽然很基础,但是有一些内容之前确实没有很扎实得掌握,所以…

win7(64位)php5.5-Apache2.4-mysql5.6环境安装

win7(64位)安装搭建 php-5.5.10 apache2.4.7 mysql-5.6.16 环境 工具/原料 php-5.5.10-Win32-VC11-x64.zip 下载地址: http://windows.php.net/download/ httpd-2.4.7-win64-VC11.zip 下载地址: http://www.apachelounge.com/download/ mysql-5.6.16-win…

php开发环境 ubuntu,Ubuntu配置PHP开发环境

开发环境安装目前web服务器有很多,本文安装Apache服务器;本文使用的服务器是Mysql服务器。sudo apt install apache2常用命令重启Apache:sudo /etc/init.d/apache2 restart重启php:sudo /etc/init.d/php-fapm restart配置apache服…

php基础知识总结大全,php基础知识回顾 —— 常量

您现在的位置是:网站首页>>PHP>>phpphp基础知识回顾 —— 常量发布时间:2019-01-23 17:23:08作者:wangjian浏览量:489点赞量:0在PHP中有这样一类变量,当变量值被定义之后,它的值就不…

Android Studio 下使用git -- 个人,本地版本控制

第一步:下载安装git 下载地址 : https://git-scm.com/downloads 第二步:Android Studio 下配置git路径。 配置之后,Test弹出如下成功的提示即可。 第三步:创建版本库 选择项目的根目录比较适合。 第四步:添加需要版本控…

oracle忽略除数为0,ora-01476除数为0的解决办法,oracle中decode()的使用

执行报表查询,固定的一个时间点没有数据,应该是有数据的,把前一个时间节点往前调是有的,往后调也有bebug报错把sql放到数据库中,发现提示如截图解决办法,oracle中的decode()select decode(b,0,0,a/b*100) …

Java GridBagLayout 简单使用

这里只介绍了很基础布局构建及使用,主要是关于 GridBagLayout. 首先整套流程大概是, 声明一个 GridBagLayout 对象 private GridBagLayout gridBagLayoutFrame new GridBagLayout(); 然后把当前类的容器布局管理器设置为 GridBagLayout this.setLayout(…

Angular之简单的登录注册

使用Angular实现了一个简单的登录注册的功能........ 涉及到的Angular知识点很少 主要是这个功能的实现...(*^__^*) 嘻嘻…… 里面涉及到的知识点记录: 1.本地存储的操作 localStorage 获取本地存储的值 window.localStorage.getItem(key)-->value (得到的数据是字符串&qu…

微信扫码下载iosAPP

1.首先在应用宝上传你的安卓APP应用,AppStore已经有了APP 2.进入应用宝app应用管理中心,点击“微下载”,然后里面的微下载链接地址就可以用了,可以看到ios可以通过应用宝再跳到AppStore就可以实现下载了转载于:https://www.cnblog…

linux中的加法函数,上下文管理练习(为加法函数计时)

上下文管理(为加法函数计时)为加法函数计时使用装饰器显示该函数的执行时长使用上下文管理显示该函数的执行时长装饰器实现import timeimport datetimefrom functools import wrapsdef logger(fn):wraps(fn) # wraps(fn)(wrapper)def wrapper(*args, **kw):start datetime.dat…

07数组与接口

1、运行TextInherists.java 示例,观察输出,注意总结父类与子类之间构造方法的的调用关系,修改parent构造方法的代码,显式调用grandparent另一个构造函数。 源代码: class GrandParent{ public GrandParent(){ System.o…

windows 访问linux中的mongodb,MongoDB的linux系统下的安装与连接

一 安装MongoDB的服务下载Linux系统下的MongoDB安装包上传压缩包到linux服务器中,解压到对应的安装目录下mkdir /usr/local/mongodbtar -zxvf mongodb-linux-x86_64-4.0.10.tgzmv mongodb-linux-x86_64-4.0.10 /usr/local/mongodb新建目录,分别用来存储数…

linux sqlserver 管理工具,Linux连接SqlServer的图形化工具SQuirrel

SQuirrel SQL一款基于java的数据库管理工具。所以可以运行在任意平台上,除了界面丑一点。在windows上我绝对不会选的,navicat多好。安装下载地址:https://sourceforge.net/projects/squirrel-sql/?sourcetyp_redirect在控制台运行&#xff1…

JDK源码包结构分类

最近查看JDK源码时,无意间发现几个类在陌生包里:com.sun.*、sun.*、org.*,google了一把总结了下以备他人搜索,如内容有误欢迎指正!Jre库包含的jar文件(jdk1.6):resources.jar、rt.jar、jsse.jar、jce.jar、…

GJM :Sql 各种语句 以及函数 [转载]

版权声明:本文原创发表于 【请点击连接前往】 ,未经作者同意必须保留此段声明!如有侵权请联系我删帖处理!1.更改数据库的名称 2.表中有数据的情况下再添加列、删除列 3.在SQLServer 中各种查询语句的使用示例 4.模糊查询的语句 5.…

linux中断处理体系结构分析(一),Linux中断处理体系结构分析(二)

1.中断处理的体系结构我们知道编写设备驱动程序一定要用到中断处理函数,这在驱动程序的编写中,占据很重要的一部分。在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interrupt handler)或中断服务例程(in…

c语言作业题五六章答案,数据结构(C语言版)第五六章习题答案

数据结构(C语言版)第五六章习题答案,人民邮电出版社,答案很详细。(15)设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有( )个。A. n-1 B.n C. n1 D. n22.应…

Android中土司(Toast)的使用

Android中Toast的使用 什么是土司(Toast)? Toast是Android系统提供的一种非常好的提示方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何的屏幕空间. 下面我们通过代码来体验一下土司在Android中的使用 1 import android.a…

atoll找不到标识符c语言,C/C++编程笔记:C++中的atol,atoll和atof函数

1、atol()此函数将作为参数传递给函数调用的C类型字符串转换为长整数。它解析C字符串str,将其内容解释为整数,并作为long int类型的值返回。该函数丢弃出现在字符串开头的空白字符,直到找到非空白字符为止。如果C字符串str中的非空白字符序列…