python抢票_Python实现自动化抢票

首先,我们用到一个Splinter库:

相信做自动化测试、自动化爬虫的朋友都知道Selenium工具,它可以把人为驱动行为转化为机器执行,Splinter的药效跟它是一样的。我们可以进去cmd后用pip install splinter

这个命令来安装。

然后,开始使劲地码:

1. 定义自动购票的类(初始化属性)

class Buy_Tickets(object):

# 定义实例属性,初始化

def __init__(self, username, passwd, order, passengers, dtime, starts, ends):

self.username = username

self.passwd = passwd

self.order = order # 车次,0代表所有车次

self.passengers = passengers # 乘客名

self.starts = starts # 起始地和终点

self.ends = ends

self.dtime = dtime # 日期

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.driver_name = 'chrome'

self.executable_path = 'C:\python\chromedriver.exe'

2. 实现登录功能

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)

# sleep(1)

print('请输入验证码...')

while True:

if self.driver.url != self.initMy_url:

sleep(1)

else:

break

3. 实现购票功能

def start_buy(self):

self.driver = Browser(driver_name=self.driver_name, executable_path=self.executable_path)

# 窗口大小的操作

self.driver.driver.set_window_size(1200, 700)

self.login()

self.driver.visit(self.ticket_url)

try:

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

4. 邮箱通知付款

def sendMail(self, mail_title, mail_content):

my_sender = 'xxx@qq.com' # 发件人邮箱账号

my_user = 'xxxx@qq.com' # 收件人邮箱账号

try:

'''发送邮件'''

msg = MIMEText(mail_content, "plain", 'utf-8') # 发送邮件内容

msg["Subject"] = Header(mail_title, 'utf-8') # 发送邮件主题/标题

msg["From"] = formataddr(['Bruce pk', my_sender]) # 邮件发送方

msg["To"] = formataddr(['brucepk', my_user]) # 邮件接收方

s = smtplib.SMTP("smtp.qq.com", 25) # 邮箱的传输协议,端口默认25

s.login(my_sender, 'xxxxx') # 登录邮箱,这里的第二个参数为qq邮箱授权码,不要填你的登录密码

s.sendmail(my_sender, [my_user, ], msg.as_string()) # 发送方,接收方,发送消息

s.quit() # 退出邮箱

print("抢票通知邮件发送成功!")

except Exception:

print("邮件发送失败~~")

还有,网络不好或者12306的服务器不稳定的时候,就会卡住,针对这种情况,系统会重复查询:

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('预订'):

i.click()

sleep(1)

except Exception as e:

print(e)

print('预订失败...')

continue

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()

sleep(3)

print('提交订单...')

self.driver.find_by_id('submitOrder_id').click()

sleep(5)

print('确认选座...')

self.driver.find_by_id('qr_submit_id').click()

print('预订成功...')

sleep(5)

self.sendMail(mail_title, mail_content)

except Exception as e:

print(e)

最后,祝大家都能顺利抢到票回家过年。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
故宫博物馆是中国最大的古代文化艺术博物馆,位于北京市中心的故宫内,是世界上最大的古代宫殿建筑群之一。由于其独特的历史和文化价值,故宫博物馆每年吸引了大量的游客。为了方便游客预订门票,故宫博物馆推出了在线抢票系统。 如果你想使用Python编写一个故宫博物馆抢票程序,可以按照以下步骤进行: 1. 确定目标:首先,你需要明确你的目标是通过抢票程序来获取故宫博物馆的门票。 2. 网络请求:使用Python的网络请求库(如requests)向故宫博物馆的官方网站发送请求,获取相关信息。 3. 解析网页:使用HTML解析库(如BeautifulSoup)解析网页内容,提取出需要的信息,如门票的日期、时间、价格等。 4. 登录账号:如果故宫博物馆的抢票系统需要登录账号才能进行抢票,你需要编写代码模拟登录过程,包括填写用户名和密码、提交表单等。 5. 抢票逻辑:根据你的需求和故宫博物馆抢票系统的规则,编写抢票逻辑,包括选择日期、时间、票种等,并提交订单。 6. 自动化操作:为了实现自动化操作,你可以使用Python自动化测试库(如Selenium)来模拟用户在浏览器中的操作,如点击按钮、填写表单等。 需要注意的是,故宫博物馆的抢票系统可能会有反爬虫机制,为了避免被封IP或账号,你需要合理设置请求频率和使用代理IP等技术手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值