GithubHelp home page GithubHelp logo

autoticket's Introduction

Autoticket

大麦网自动抢票工具

时间与精力缘故,本仓库不再提供后续维护,其中内容仅供学习交流使用。

Preliminary

Python 3.6 + pip

Option1:Firefox(测试版本:v68.0.1.7137) + geckodriver(测试版本:v0.24.0)

Option2:Chrome (测试版本:v77.0.3865.90) + Chrome driver (测试版本:v77.0.3865.10)

注:Release中有测试版本的Windows driver,下载后请与.py文件放在同一文件夹下;代码本身支持Windows、Linux、MacOS,请移步Wiki更换浏览器驱动

Mac上通过homebrew安装drivers:

  1. brew cask install chromedriver
  2. brew install geckodriver

Step

【重要,用前必看!!!】

第一步:搭建python3+pip环境,可使用anaconda、pycharm等集成环境,或纯python环境 (Windows下的环境搭建流程可参考 Windows搭建python3开发环境&卸载)

第二步:依赖安装,pip install -r requirements.txt

第三步:复制config.example.json文件并将新其命名为config.json。按Basic usage中的说明填写config.json配置文件,其中real_name项的填写务必提前到目标购票网址“购票须知”处确认是否需要实名者,以及是一证一票还是一人多票,若无需实名购票,则real_name留空;若一证一票,则real_name的数量必须与ticket_num的数字相同;若一人多票,则real_name仅留一个,ticket_num可多张

注:config.json文件中的配置信息均为必填项,有些可以留空,但请勿删除,若未按说明填写正确,极有可能导致抢票失败

Basic usage

在config.json中输入相应配置信息,具体说明如下:

{

"sess": [ # 场次优先级列表,如本例**有三个场次,根据下表,则优先选择1,再选择2,最后选择3;也可以仅设置1个
    1,
    2,
    3,
],
"price": [ # 票价优先级,如本例**有三档票价,根据下表,则优先选择1,再选择3;也可以仅设置1个
    1,
    3
],
"date": 0, # 选择第几个日期,默认为0表示不选择
"real_name": [# 实名者序号,如本例**有两位实名者,根据序号,同时选择1,2位实名者,留空表示无需实名购票
    1,
    2
],
"nick_name": "your_nick_name", # 用户的昵称,用于验证登录是否成功
"ticket_num": 2, # 购买票数
"damai_url": "https://www.damai.cn/", # 大麦网官网网址
"target_url": "https://detail.damai.cn/item.htm?id=599834886497", # 目标购票网址
"browser": 0 # 浏览器类别,0为Chrome(默认),1为Firefox

}

avatar

avatar

配置实名者时请查看购票须知中是否有相关要求,下面两张图分别表示没有、有实名需求的情况:

avatar

avatar

若是首次登录,根据终端输出的提示,依次点击登录、扫码登录,代码将自动保存cookie文件(cookie.pkl)。

使用前请将待抢票者的姓名、手机、地址设为默认,如存在多名实名者,请提前保存相关信息。

配置完成后执行python Autoticket.py即可,由于有启动延迟,建议提前一段时间打开程序。

Advance usage

最后成功测试运行时间:2019-10-06。

此方法太过于依赖大麦网页面源码的元素的title、Xpath、class name、tag name等,若相应的绝对路径寻找不到则代码无法运行。

建议自己先测试一遍,自行修改相应的绝对路径或用更好的定位方法替代。

具体定位方案请参见Wiki

本代码可修改为防弹窗类异常的持续抢票,仅需修改代码末尾:解注释"while True"与"break",注释"if True"即可。

# while True: # 可用于无限抢票,防止弹窗类异常使抢票终止
if True:
    try:
        if con.type == 1:  # detail.damai.cn
            con.choose_ticket_1()
            con.check_order_1()
        elif con.type == 2:  # piao.damai.cn
            con.choose_ticket_2()
            con.check_order_2()
        # break
    except Exception as e:
        print(e)
        con.driver.get(con.target_url)
con.finish()

Potential Problems

若遇到selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version xx这样的错误,说明当前Chrome的版本不够,需要升级成xx版本

Change log

v0.1:

基本功能实现:

1)用户登录cookie记录

2)场次、票档自动勾选,优先级设定,自动跳过无票/缺货登记

3)实名者/观演人设定

v0.2:

鲁棒性提升:

1)添加用户昵称,验证登录成功

2)修改提交订单按钮的索引方式,增强适配性

v0.3:

增强适配性,添加piao.damai.cn类别网页支持

v0.4:

鲁棒性提升,修改终端输出内容,添加指定购买票数功能(暂未支持勾选多实名者)

v0.5:

改默认浏览器为Chrome,默认取消图片加载,修复了部分bug,支持detail类别网站的票数增减、多实名者勾选,调整部分定位方式,修改错误输出

v0.6:

增加日期选择功能,完善实名售票,增强异常处理与第2类网址适配

To-do List

  1. 鲁棒性增强(刷新稳定性)

  2. 代码重构,拆分两类网址和两种浏览器,维持代码整洁

  3. 速度提升(多用户多线程,减少页面元素加载)

  4. 完善第2类网址(piao.damai.cn)实名购票功能

  5. 适配手机APP端(可考虑使用Autojs)

Ref

本代码修改自Ref 1,2两个Repo,参考了Ref 3。

  1. Oliver0047: https://github.com/Oliver0047/Concert_Ticket

  2. MakiNaruto: https://github.com/MakiNaruto/Automatic_ticket_purchase

  3. JnuMxin: https://github.com/JnuMxin/damaiAuto

autoticket's People

Contributors

entromorgan avatar msute avatar mumuyizhou avatar sheriszeto avatar taoup avatar yawwwwwn avatar zhenhangtung avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

autoticket's Issues

闪退

我设置正确,但是程序闪退,
image
这是错误代码,我特意使用有余票的演唱会试的,希望收到回复。谢谢您
另外:这个场次切换,刷不出票档,有没有啥好的解决方案

selenium

PS H:\ticket\Autoticket-master> python Autoticket.py
Traceback (most recent call last):
File "Autoticket.py", line 8, in
from selenium import webdriver
ImportError: No module named selenium

PS H:\ticket\Autoticket-master> pip install selenium
Requirement already satisfied: selenium in d:\software\python\lib\site-packages (3.141.0)
Requirement already satisfied: urllib3 in d:\software\python\lib\site-packages (from selenium) (1.25.8)

他说没有selenium,然后我安装了啊,这个怎么解决?

改动代码运行闪退

改动的只有config.json里面的内容吧,我改了一点,运行了一半,抢票过程中闪退了

排队报错闪退

刷新一切正常,且在有票的演唱会测试购票也正常,但是,今天抢刘天王的票时,放票一瞬间,直接跳到人数过多排队页面,然后就一瞬间,直接闪退,接着程序报错,崩溃呀当时。希望改进下!

指定抢票数量

你好,我改了下多张票的代码,简单试了下好像能用
`ticket_limit = self.driver.find_element_by_class_name('number_right_limit')
print('{}'.format(ticket_limit.text))
print('设定购买{}张'.format(self.ticket_num))

        if self.ticket_num > 1:# 自动添加购票数
            add = self.driver.find_element_by_class_name('cafe-c-input-number-handler-up')
            while add.is_displayed() != True: # 等待显示
                continue
            for i in range(self.ticket_num-1):
                add.click()  `

运行Autoticket.py闪退

大佬你好,我是小白,我下载了python3.7,并配置了环境变量,然后右键去运行你那个Autoticket.py直接闪退了。怎么办啊

Autoticket.py闪退

大佬你好,我是小白一枚,下载python3.7并配置环境变量后运行Autoticket.py闪退了,怎么办啊

关于自动化登录一直报错的问题。

借鉴项目的代码,针对采购的网址,重定位calss属性,进行操作。
控件描述一直发生变更。

所以针对每个订单进行修改。但是,在登录阶段经常无法登录。

请问,是否有这个情况和问题。

此外,学习群加满了。。。有二群不。

能不能抢到大麦网APP的票

如题,很多火爆的演出都只有APP上能购买(网页无法购买),可能是使用的是不同接口,考不考虑支持购买APP上的门票

***错误:登录失败,尝试删除cookie后重试***

你好,请问我运行程序然后再手机上扫码登录后,虽然登录了进去,但是程序就停了,并且弹出上面这个报错是什么原因呢。尝试了多次都是同样的结果。如果博主不介意的话也可以加个微信聊聊:15217451052

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.