找回密码
 会员注册
查看: 24|回复: 0

Python制作大麦网抢票程序,看演唱会再也不怕没票了

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-9-6 21:54:16 | 显示全部楼层 |阅读模式
前言大麦网,是中国综合类现场娱乐票务营销平台,业务覆盖演唱会、话剧、音乐剧、体育赛事等领域。但是因为票数有限,还有黄牛们不能丢了饭碗,所以导致了,很多人都抢不到票那么,今天带大家用Python来制作一个自动抢票的脚本小程序知识点:面向对象编程selenium操作浏览器pickle保存和读取Cookie实现免登陆time做延时操作os创建文件,判断文件是否存在开发环境:版本:anaconda5.2.0(python3.6.5)编辑器:pycharm先导入本次所需的模块importosimporttimeimportpicklefromtimeimportsleepfromseleniumimportwebdriver12345第一步,实现免登录确定目标,设置全局变量#大麦网主页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%E7123456初始化加载classConcert:def__init__(self):self.status=0#状态,表示如今进行到何种程度self.login_method=1#{0:模拟登录,1:Cookie登录}自行选择登录方式self.driver=webdriver.Chrome(executable_path='chromedriver.exe')#默认Chrome浏览器12345登录调用设置cookie~~~pythondefset_cookie(self):self.driver.get(damai_url)print("###请点击登录###")whileself.driver.title.find('大麦网-全球演出赛事官方购票平台')!=-1:sleep(1)print('###请扫码登录###')whileself.driver.title!='大麦网-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':sleep(1)print("###扫码成功###")pickle.dump(self.driver.get_cookies(),open("cookies.pkl","wb"))print("###Cookie保存成功###")self.driver.get(target_url)~~~123456789101112131415获取cookie~~~pythondefget_cookie(self):try:cookies=pickle.load(open("cookies.pkl","rb"))#载入cookieforcookieincookies:cookie_dict={'domain':'.damai.cn',#必须有,不然就是假登录'name':cookie.get('name'),'value':cookie.get('value')}self.driver.add_cookie(cookie_dict)print('###载入Cookie###')exceptExceptionase:print(e)~~~123456789101112131415登录deflogin(self):ifself.login_method==0:self.driver.get(login_url)#载入登录界面print('###开始登录###')elifself.login_method==1:ifnotos.path.exists('cookies.pkl'):#如果不存在cookie.pkl,就获取一下self.set_cookie()else:self.driver.get(target_url)self.get_cookie()12345678910111213打开浏览器defenter_concert(self):"""打开浏览器"""print('###打开浏览器,进入大麦网###')#self.driver.maximize_window()#最大化窗口#调用登陆self.login()#先登录再说self.driver.refresh()#刷新页面self.status=2#登录成功标识print("###登录成功###")#后续德云社可以讲ifself.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()123456789101112第二步,抢票并下单判断元素是否存在defisElementExist(self,element):flag=Truebrowser=self.drivertry:browser.find_element_by_xpath(element)returnflagexcept:flag=Falsereturnflag12345678910选票操作defchoose_ticket(self):ifself.status==2:#登录成功入口print("="*30)print("###开始进行日期及票价选择###")whileself.driver.title.find('确认订单')==-1:#如果跳转到了订单结算界面就算这步成功了,否则继续执行此步try:buybutton=self.driver.find_element_by_class_name('buybtn').textifbuybutton=="提交缺货登记":#改变现有状态self.status=2self.driver.get(target_url)print('###抢票未开始,刷新等待开始###')continueelifbuybutton=="立即预定":self.driver.find_element_by_class_name('buybtn').click()#改变现有状态self.status=3elifbuybutton=="立即购买":self.driver.find_element_by_class_name('buybtn').click()#改变现有状态self.status=4#选座购买暂时无法完成自动化elifbuybutton=="选座购买":self.driver.find_element_by_class_name('buybtn').click()self.status=5except:print('###未跳转到订单结算界面###')title=self.driver.titleiftitle=='选座购买':#实现选座位购买的逻辑self.choice_seats()eliftitle=='确认订单':whileTrue:#如果为确认订单print('waiting......')ifself.isElementExist('//*[@id="container"]/div/div[9]/button'):self.check_order()break1234567891011121314151617181920212223242526272829303132333435363738选择座位defchoice_seats(self):whileself.driver.title=='选座购买':whileself.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]/divwhileself.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()123456789下单操作defcheck_order(self):ifself.statusin[3,4,5]:print('###开始确认订单###')try:#默认选第一个购票人信息self.driver.find_element_by_xpath('//*[@id="container"]/div/div[2]/div[2]/div[1]/div/label').click()exceptExceptionase:print("###购票人信息选中失败,自行查看元素位置###")print(e)#最后一步提交订单time.sleep(0.5)#太快会影响加载,导致按钮点击无效self.driver.find_element_by_xpath('//div[@class="w1200"]//div[2]//div//div[9]//button[1]').click()123456789101112抢票完成,退出deffinish(self):self.driver.quit()12测试代码是否成功if__name__=='__main__':try:con=Concert()#具体如果填写请查看类中的初始化函数con.enter_concert()#打开浏览器con.choose_ticket()#开始抢票exceptExceptionase:print(e)con.finish()123456789最后看下效果如何源码在文末自取哦如果大家对Python感兴趣,这套python学习资料一定对你有用对于0基础小白入门:如果你是零基础小白,想快速入门Python是可以考虑的。一方面是学习时间相对较短,学习内容更全面更集中。二方面是可以根据这些资料规划好学习计划和方向。包括:Python激活码+安装包、Pythonweb开发,Python爬虫,Python数据分析,人工智能、机器学习、Python量化交易等习教程。带你从零基础系统性的学好Python!零基础Python学习资源介绍①Python所有方向的学习路线图,清楚各个方向要学什么东西②600多节Python课程视频,涵盖必备基础、爬虫和数据分析③100多个Python实战案例,含50个超大型项目详解,学习不再是只会理论④20款主流手游迫解爬虫手游逆行迫解教程包⑤爬虫与反爬虫攻防教程包,含15个大型网站迫解⑥爬虫APP逆向实战教程包,含45项绝密技术详解⑦超300本Python电子好书,从入门到高阶应有尽有⑧华为出品独家Python漫画教程,手机也能学习⑨历年互联网企业Python面试真题,复习时非常方便👉Python学习路线汇总👈Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)👉Python必备开发工具👈温馨提示:篇幅有限,已打包文件夹,获取方式在:文末👉Python学习视频600合集👈观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。👉实战案例👈光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。👉100道Python练习题👈检查学习结果。👉面试刷题👈资料领取这份完整版的Python全套学习资料已经上传网盘,朋友们如果需要可以点击下方微信卡片免费领取↓↓↓【保证100%免费】
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 18:32 , Processed in 0.937258 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表