用Python制作一个自动抢票脚本

用Python制作一个自动抢票脚本学好 Python 不论是就业数据分析还是做副业赚钱都不错 但要学会 Python 还是要有一个学习规划

大家好,欢迎来到IT知识分享网。

前言

知识点:

开发环境:

第一步,实现免登录

确定目标,设置全局变量

# 大麦网主页
damai_url = "https://www.damai.cn/"
# 登录页
login_url = "https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F"
# 抢票目标页
target_url = 'https://detail.damai.cn/item.htm?spm=a2oeg.search_category.0.0.77f24d15RWgT4o&id=654534889506&clicktitle=%E5%A4%A7%E4%BC%97%E7

初始化加载

class Concert: def __init__(self): self.status = 0 # 状态,表示如今进行到何种程度 self.login_method = 1 # {0:模拟登录,1:Cookie登录}自行选择登录方式 self.driver = webdriver.Chrome(executable_path='chromedriver.exe') # 默认Chrome浏览器 

登录调用设置cookie

def set_cookie(self): self.driver.get(damai_url) print("请点击登录") while self.driver.title.find('大麦网-全球演出赛事官方购票平台') != -1: sleep(1) print('请扫码登录') while self.driver.title != '大麦网-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!': sleep(1) print("扫码成功") pickle.dump(self.driver.get_cookies(), open("cookies.pkl", "wb")) print("Cookie保存成功") self.driver.get(target_url) 

获取cookie

def get_cookie(self): try: cookies = pickle.load(open("cookies.pkl", "rb")) # 载入cookie for cookie in cookies: cookie_dict = { 'domain':'.damai.cn', # 必须有,不然就是假登录 'name': cookie.get('name'), 'value': cookie.get('value') } self.driver.add_cookie(cookie_dict) print('载入Cookie') except Exception as e: print(e) 

登录

 def login(self): if self.login_method==0: self.driver.get(login_url) # 载入登录界面 print('开始登录') elif self.login_method==1: if not os.path.exists('cookies.pkl'): # 如果不存在cookie.pkl,就获取一下 self.set_cookie() else: self.driver.get(target_url) self.get_cookie() 

打开浏览器

def enter_concert(self):
    """打开浏览器"""
    print('打开浏览器,进入大麦网')
    # self.driver.maximize_window()           # 最大化窗口
    # 调用登陆
    self.login()                            # 先登录再说
    self.driver.refresh()                   # 刷新页面
    self.status = 2                         # 登录成功标识
    print("登录成功")
    # 后续德云社可以讲
    if self.isElementExist('/html/body/div[2]/div[2]/div/div/div[3]/div[2]'):
        self.driver.find_element_by_xpath('/html/body/div[2]/div[2]/div/div/div[3]/div[2]').click()

第二步,抢票并下单

判断元素是否存在

def isElementExist(self, element): flag = True browser = self.driver try: browser.find_element_by_xpath(element) return flag except: flag = False return flag 

选票操作

def choose_ticket(self): if self.status == 2: #登录成功入口 print("="*30) print("开始进行日期及票价选择") while self.driver.title.find('确认订单') == -1: # 如果跳转到了订单结算界面就算这步成功了,否则继续执行此步 try: buybutton = self.driver.find_element_by_class_name('buybtn').text if buybutton == "提交缺货登记": # 改变现有状态 self.status=2 self.driver.get(target_url) print('抢票未开始,刷新等待开始') continue elif buybutton == "立即预定": self.driver.find_element_by_class_name('buybtn').click() # 改变现有状态 self.status = 3 elif buybutton == "立即购买": self.driver.find_element_by_class_name('buybtn').click() # 改变现有状态 self.status = 4 # 选座购买暂时无法完成自动化 elif buybutton == "选座购买": self.driver.find_element_by_class_name('buybtn').click() self.status = 5 except: print('未跳转到订单结算界面') title = self.driver.title if title == '选座购买': # 实现选座位购买的逻辑 self.choice_seats() elif title == '确认订单': while True: # 如果标题为确认订单 print('waiting ......') if self.isElementExist('//*[@id="container"]/div/div[9]/button'): self.check_order() break 

选择座位

 def choice_seats(self): while self.driver.title == '选座购买': while self.isElementExist('//*[@id="app"]/div[2]/div[2]/div[1]/div[2]/img'): # 座位手动选择 选中座位之后//*[@id="app"]/div[2]/div[2]/div[1]/div[2]/img 就会消失 print('请快速的选择您的座位!!!') # 消失之后就会出现 //*[@id="app"]/div[2]/div[2]/div[2]/div while self.isElementExist('//*[@id="app"]/div[2]/div[2]/div[2]/div'): # 找到之后进行点击确认选座 self.driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div[2]/button').click() 

下单操作

def check_order(self): if self.status in [3,4,5]: print('开始确认订单') try: # 默认选第一个购票人信息 self.driver.find_element_by_xpath('//*[@id="container"]/div/div[2]/div[2]/div[1]/div/label').click() except Exception as e: print("购票人信息选中失败,自行查看元素位置") print(e) # 最后一步提交订单 time.sleep(0.5) # 太快会影响加载,导致按钮点击无效 self.driver.find_element_by_xpath('//div[@class = "w1200"]//div[2]//div//div[9]//button[1]').click() 

抢票完成,退出

def finish(self): self.driver.quit() 

测试代码是否成功

if __name__ == '__main__': try: con = Concert() # 具体如果填写请查看类中的初始化函数 con.enter_concert() # 打开浏览器 con.choose_ticket() # 开始抢票 except Exception as e: print(e) con.finish() 

最后看下效果如何

用Python制作一个自动抢票脚本

Python经验分享

学好 Python 不论是就业数据分析还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

Python学习路线

学习软件

学习视频

100道练习题

在这里插入图片描述

实战案例

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

用Python制作一个自动抢票脚本

大麦抢票源码也可以拿哦~!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/122962.html

(0)
上一篇 2025-10-12 18:15
下一篇 2025-10-12 18:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信