python抢火车票 短信通知
# -*- coding: utf-8 -*-
from splinter.browser import Browser
from time import sleep
import traceback
from twilio.rest import Client
# import sys
# reload(sys)
# sys.setdefaultencoding('utf-8') class Buy_Tickets(object):
# 定义实例属性,初始化
def __init__(self, username, passwd, order, passengers, dtime, starts, ends):
self.username = username
self.passwd = passwd
# 车次,0代表所有车次,1代表第一个车次,依次从上到下,依次类推
self.order = order
# 乘客名
self.passengers = passengers
# 起始地
self.starts = starts
# 目的点
self.ends = ends
# 日期
self.dtime = dtime
# self.xb = xb
# self.pz = pz
self.login_url = 'https://kyfw.12306.cn/otn/login/init'
self.initMy_url = 'https://kyfw.12306.cn/otn/view/index.html'
self.ticket_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
self.buy_url = 'https://kyfw.12306.cn/otn/confirmPassenger/initDc'
self.driver_name = 'chrome'
self.executable_path = 'E:\Python\Scripts\chromedriver.exe'
def login(self):
self.driver.visit(self.login_url)
self.driver.fill('loginUserDTO.user_name', self.username)
self.driver.fill('userDTO.password', self.passwd)
print('输入验证码...')
while 1:
if self.driver.url != self.initMy_url:
sleep(5)
else:
break
def start_buy(self):
self.driver = Browser(driver_name=self.driver_name, executable_path=self.executable_path)
#窗口大小的操作
self.driver.driver.set_window_size(1000, 700)
self.login()
self.driver.visit(self.ticket_url)
try:
self.check_ticket()
self.buy_ticket()
except Exception as e:
print(e)
def check_ticket(self):
print('开始选票...')
# 加载查询信息
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('查询').click()
count += 1
print('第 %d次点击查询...' % count)
try:
self.driver.find_by_text('预订')[self.order-1].click()
sleep(1.5)
except Exception as e:
print(e)
print('预订失败...')
continue
else:
while self.driver.url == self.ticket_url:
self.driver.find_by_text('查询').click()
count += 1
print('第%d次点击查询...' % count)
try:
for i in self.driver.find_by_text('预订'):
if i.has_class('btn72'):
i.click()
sleep(1)
except Exception as e:
print(e)
print('预订失败...')
continue
sleep(1)
def buy_ticket(self):
print('开始预订...')
sleep(1)
print('选择用户...')
for p in self.passengers:
self.driver.find_by_text(p).last.click()
sleep(0.5)
if p[-1] == ')':
self.driver.find_by_id('dialog_xsertcj_ok').click()
print('提交订单...')
# sleep(1)
# self.driver.find_by_text(self.pz).click()
# sleep(1)
# self.driver.find_by_text(self.xb).click()
# sleep(1)
self.driver.find_by_id('submitOrder_id').click()
sleep(2)
print('确认选座...')
self.driver.find_by_id('qr_submit_id').click()
print('预订成功...')
sme_text = '抢到票了,赶紧去付款 !!\n I get a ticket,now going to pay !!'
self.sendSMS(my_number='xxx',msg=sme_text)
print '短信发送成功'
def sendSMS(self,my_number,msg='你好,这是来自你自己的手机测试信息!'):
account_sid = 'xxx'
auth_token = 'xxx'
twilio_number = 'xxx'
client = Client(account_sid, auth_token)
message = client.messages.create(from_=twilio_number,body=msg,to=my_number)
print(message.sid) if __name__ == '__main__':
# 用户名
username = 'xxx'
# 密码
password = 'xxx'
# 车次选择,0代表所有车次
order = 0
# 乘客名,学生票需注明,比如passengers = ['小红', '小明(学生)']
passengers = ['xxx']
# 日期
dtime = '2019-02-01'
# 出发地(cookie值)
starts = '%u5357%u4EAC%u5357%2CNKH' #南京南
# 目的地(cookie值)
ends = '%u6C49%u53E3%2CHKN' #汉口 # xb =['硬座']
# pz=['成人票']
Buy_Tickets(username, password, order, passengers, dtime, starts, ends).start_buy()
下载 chromedriver.exe,镜像网址 http://npm.taobao.org/mirrors/chromedriver/
发送短信,申请token, https://www.twilio.com/
python抢火车票 短信通知的更多相关文章
- python抢火车票的脚本
起因: 想着那么多人,抢不到火车票.感觉到一丝感慨 所以有了抢火车票这个脚本. 0x01 思路:自动打开浏览器,自动输入账号密码 知道查看.自动预定. 0x02 要用到的模块 splinter模块: ...
- Python用上锁和解锁 lock lock.acquire lock.release 模拟抢火车票
Python用上锁和解锁 lock lock.acquire lock.release 模拟抢火车票 import jsonimport timefrom multiprocessing impor ...
- 用Python抢到回家的车票,so easy!
“ 盼望着,盼望着,春节的脚步近了,然而,每年到这个时候,最难的,莫过于一张回家的火车票. 据悉,今年春运期间,全国铁路发送旅客人次同比将增长 8.0%.达到 4.4 亿人次. 2020 年铁 ...
- python自动刷新抢火车票
#!/usr/bin/env python #-*- coding: utf-8 -*- """ 火车票 可以自动填充账号密码,同时,在登录时,也可以修改账号密码 然后手 ...
- 史上最“脑残”的“抢火车票”程序(node.js版)
[背景] 快过年了,我妈一个电话打过来叫我给他买火车票,我到12306一查,硬座和硬卧基本没有了,高铁又太贵. 最后只抢了3张无座票,但是我妈说能不能买有座位的啊,我说没有了啊,我妈:你过两天再帮我看 ...
- python抢小米6自动化脚本
#!/bin/env python # coding=utf-8 from selenium import webdriver import time import unittest class Ge ...
- Python 实现火车票查询工具
注意:由于 12306 的接口经常变化,课程内容可能很快过期,如果遇到接口问题,需要根据最新的接口对代码进行适当修改才可以完成实验. 一.实验简介 当你想查询一下火车票信息的时候,你还在上 12306 ...
- python抢票开发——设备预约助手实现
女朋友是药学院的,做实验时需要在特定的网站上进行设备预约,由于预约人数过多,从而导致从浏览器登录不进去或者登录进去预约失败等情况,所以我用python帮她写了一个抢位助手,让程序自动去进行位置预定,实 ...
- GitHub 上有哪些优秀的 Python 爬虫项目?
目录 GitHub 上有哪些优秀的 Python 爬虫项目? 大型爬虫项目: 实用型爬虫项目: 其它有趣的Python爬虫小项目: GitHub 上有哪些优秀的 Python 爬虫项目? 大型爬虫项目 ...
随机推荐
- note 2 运算符和表达式
运算符 +.-.*./ %求余Modulus **指数Exponent 表达式 #C = 5/9 (F - 32) print 5.0/9*(75-32) 自动类型转换 类型相同,结果类型不变 1/2 ...
- 阿里Java开发手册
1.1 命名风格 (1)常量命名全部大写,单词间用下划线隔开. (2)抽象类命名以Abstract或Base开头:异常类命名以Exception结尾:测试类命名以它要测试的类名开始,以Test结尾. ...
- java效率取随机不重复数
//效率取随机不重复数 public int[] takeRandom(int num) { Random rd = new Random(); int[] rds = new int[num];// ...
- spring boot 错误处理总结
在boot 中, 对404 和 异常 有了额外的处理. 当然,我们可以定制, 如何做呢? 1 写一个继承 ErrorController 的Controller 注意, 这里一定要继承 ErrorC ...
- leetcode1032
class StreamChecker: def __init__(self, words: 'List[str]'): self.maxLen = 0 self.List = set(words) ...
- Linux网络编程学习(二) ----- 进程控制(第三章)
1.进程和程序 程序是一个可执行文件,而一个进程是一个执行中的程序实例.一个进程对应于一个程序的执行,进程是动态的,程序是静态的,多个进程可以并发执行同一个程序.比如几个用户可以同时运行一个编辑程序, ...
- JAVA算术运算符
算术运算符 +.-.*(乘号)./(除号,取商).%(取余数.取模) 特殊的运算符:++(加加).--(减减) int a = 1; a+=10; 等同于a=a+10; a-=5; 等同于a= ...
- Ubuntu输入命令无效的问题
https://blog.csdn.net/u014797226/article/details/80800550?utm_source=blogxgwz2 Ubuntu启动时输入密码后,一直停留在登 ...
- Python常用字符编码
字符编码的常用种类介绍 第一种:ASCII码 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一 ...
- Scrollview包裹布局问题。
输入框获取焦点,键盘弹出,背景图片上移: https://blog.csdn.net/wljian1/article/details/79962802 android:scrollbarThumbVe ...