怎么用Python制作自动抢票的脚本
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要介绍怎么用Python制作自动抢票的脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!知识点:面向对象编程selenium 操作浏览器pickle 保存和读取Coo
千家信息网最后更新 2025年01月31日怎么用Python制作自动抢票的脚本
这篇文章主要介绍怎么用Python制作自动抢票的脚本,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
知识点:
面向对象编程
selenium 操作浏览器
pickle 保存和读取Cookie实现免登陆
time 做延时操作
os 创建文件,判断文件是否存在
开发环境:
版 本:anaconda5.2.0(python3.6.5)
编辑器:pycharm
【付费VIP完整版】只要看了就能学会的教程,80集Python基础入门视频教学
点这里即可免费在线观看
先导入本次所需的模块
import osimport timeimport picklefrom time import sleepfrom selenium import webdriver
第一步,实现免登录
确定目标,设置全局变量
# 大麦网主页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制作自动抢票的脚本"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
登录
成功
订单
浏览器
浏览
座位
选择
大麦
状态
界面
脚本
制作
信息
元素
全球
内容
官方
平台
文件
目标
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
软件开发公司交税
网络安全专业学生用什么电脑
数据库id清0
华为服务器保存配置
徐州2020年网络安全大赛
怎么构建软件开发网络扩谱图
阿里云去哪里看数据库信息
网络安全与端口的联系
河南工业大学国家网络安全
杨浦区智能软件开发设备
dell服务器光驱启动
服务器防毒
网络安全中完整性的概念
知识搜索软件开发
手机怎么访问云服务器
jsp图片上传到服务器
vb数据库数据导出
win11管理服务器
石嘴山软件开发服务价格
计算机网络技术超星考试
网络安全安全教育课
广东商业软件开发价格多少
服务器主要产品
手游我的世界有没有海贼王服务器
dell服务器光驱启动
戴尔服务器怎么通过网络远程
普拉提服务器维护
数据库技术和电子商务的关系
最新基站数据库
互联网科技产品购销合同