利用Python在互动吧网站自动抢票实战分析!你学废了吗

Python 大麦抢票脚本 此外,大麦网和其他票务平台可能会采取各种措施来防止自动化脚本的使用,包括但不限于验证码、IP限制、行为分析等。- 如果网站有验证码,可能需要使用图像处理库(如`PIL`或`opencv`)来自动识别,或者使用第三方验证码识别服务。- 使用浏览器的开发者工具(如Chrome的Inspect功能)分析大麦网的页面结构和网络请求。'Cookie': '你的大麦网登录cookie''concert_id': '演唱会ID','username': '你的账号','password': '你的密码' 阅读详情

 

一、前言

事情是这样的,由于每天早上去图书馆都要提前在互动吧网站上蹲点抢票,挺麻烦的,然后我老爸说,你怎么不自己写一个抢票软件,一句点醒了我,于是这款抢票程序来了。
在这里插入图片描述

二、思路设计

对于抢票这样的程序,难点并不是在写代码上,主要难点在于对网站源码的分析以及奇奇怪怪的情况的处理,这里选用Python作为脚本语言。我们利用selenium+chromeDriver模拟浏览器的登录。因为我们是用电脑模拟人点击,所以我们要知道订票所需要的所有步骤,这样才能自动化处理。
在购买一张票的所有流程主要就是登录然后购买,我们要先登录然后浏览器才会记住登录信息的cookies,才能正常购买。

三、登录页面分析

这里我登录使用的网站利用浏览器模拟到移动端页面,因为移动端的页面比较简单,通过检查源码,我们很快就找到了两个输入框以及登录按钮对应的位置如图所示标签位置
在这里插入图片描述
这里很简单,获取到输入框的元素之后,send_keys()来输入账号密码,之后对登录元素进行click()就可以实现登录

def login(browser):
    browser.get('https://login.hudongba.com/login/?redirectUrl=https%3A%2F%2Fwww.haudongba.com%2Fcoupon_center')
    input_account = browser.find_element_by_class_name('zc_sjK')
    input_pswd = browser.find_element_by_class_name('zc_sjK.mmkTxt')
    btn_log = browser.find_element_by_css_selector('.blueBtn a')
    input_account.send_keys('your account')
    input_pswd.send_keys('your password')
    btn_log.click()
12345678

四、购买页面分析

首先我们打开需要抢票的页面,打开F12检查网页源代码,找到报名按钮的标签元素,然后模拟点击,点击之后会出现二维码,二维码下面继续报名的链接点进去就可可以进入下一步了,这里用class来确定按钮位置,可以写成 browser.find_element_by_class_name('myApply'),然后就是链接的位置,同样用class来确定位置browser.find_element_by_class_name('font-3')

然后进入下一步就是填写个人信息的界面了,这里如图所示,我们发现如图右下角的css代码对应的是这三个input输入框,那我们可以利用css选择器来获取这三个input元素,可以写成browser.find_elements_by_css_selector('.pop_massage .dan_h .inpoutK input'),这样获得的是一个数组,接下来对每个数组send_keys()进行传值。
在这里插入图片描述
接下来我们需要点击立即报名按钮,这里我们在源码中找到立即报名的按钮标签对应的css代码块,同样的我们可以利用css选择器来定位对应的元素,这里就可以写成browser.find_element_by_css_selector('.moreApplyWrap .submit a')
然后对元素进行click()处理就可以报名成功了!
在这里插入图片描述
上面对网页简单的分析之后,我们看看完整代码,注意这里利用的sleep主要是为了保证所有元素被完全加载后再进行调用,btn_color = browser.find_element_by_class_name('myApply').value_of_css_property('background-color')这里是获取了我要报名的按钮的颜色 ,因为如果是灰色的话说明当前不允许购票,下面进入循环,不断地刷新页面获取按钮颜色,直到为指定的蓝色,循环跳出。

def buy_ticket(browser):
	browser.get('https://www.hudongba.com/party/ppfb5.html?hdb_pos=manager_info')
    # click continue buy
    time.sleep(1)
    btn_color = browser.find_element_by_class_name('myApply').value_of_css_property('background-color')
    print(btn_color)

    # if the color is not  blue ,it won`t be allowed you to order
    # then you can refresh the website
    while 1:
        if btn_color == 'rgba(0, 153, 233, 1)':
            break
        else:
            browser.refresh()
            time.sleep(1)
            btn_color = browser.find_element_by_class_name('myApply').value_of_css_property('background-color')

    browser.find_element_by_class_name('myApply').click()
    btn_next = browser.find_element_by_class_name('font-3')
    btn_next.click()
    # input information
    time.sleep(1)
    input_elements = browser.find_elements_by_css_selector('.pop_massage .dan_h .inpoutK input')
    print(input_elements)
    input_elements[0].clear()
    input_elements[1].clear()
    input_elements[2].clear()
    input_elements[0].send_keys("小成Charles")
    input_elements[1].send_keys("123456785555")
    input_elements[2].send_keys("45645646464456211")
    # click blueBtn
    blue_btn = browser.find_element_by_css_selector('.moreApplyWrap .submit a')
    print(blue_btn)
    blue_btn.click()
    # jude success or failed
    time.sleep(1)

    FLAG = browser.find_element_by_class_name('centerMsg')
    if len(FLAG) != 0:
        print("success")
    else:
        print("failed")
123456789101112131415161718192021222324252627282930313233343536373839404142

五、主函数代码分析

这里首先是初始化chrome浏览器,设置浏览器头标签为移动端user-agent,移动端代码实现登录模块,调用过login函数之后,再把浏览器标识符换回成PC端,用来实现购票页面的模块(实践操作发现购票模块的移动端有些bug),这里browser.execute_cdp_cmd()实现将浏览器标识进行转换,然后再运行buy_ticket(browser)函数块就又是PC端了!

if __name__ == '__main__':
    # send_emails()
    USER_AGENT = 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.' \
                 '4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4'
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument("--User-Agent=" + USER_AGENT)
    #chrome_options.add_argument('--headless')#这里实现将启动页面影藏
    browser = webdriver.Chrome(options=chrome_options)


    login(browser)

    # switch the chrome to PC option then open the URL
    browser.execute_cdp_cmd("Emulation.setUserAgentOverride", {
        "userAgent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0"
    })

    buy_ticket(browser)
123456789101112131415161718

六、总结

这个程序本身是有很多bug的,原理上你需要对每个获取元素代码块进行异常捕获处理,以及异常后应该做出怎样的判断。完善代码后如果可以的话可以把程序放到服务器上24小时不断运行,这样才能真正实现自动抢票!

作者:小成Charles
原创作品
转载请标注原创文章地址:https://blog.youkuaiyun.com/weixin_42999453/article/details/113999110

 

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,点击蓝色自己加入讨论解答资源基地

​

 

从易语言到微服务:解锁抢票软件的秘密武器 易语言(EPL)是一种面向中文用户设计的编程语言,提供了丰富的中文关键字,支持快速开发窗体应用程序。易语言非常适合初学者和非专业开发者,因为它简化了许多编程任务。 阅读详情

相关推荐

利用Python自动抢火车票真的不难,100行代码即可完成(文末领源码)

如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,我也为大家整理了一份【最新全套Python学习资料】一定对你有用!如果需要可以扫描下方二维码免费获取如果你是零基础小白,想快速入门Python是可以考虑的!1、学习时间相对较短,学习内容更全面更集中2、可以找到适合自己的学习方案这份资料包含:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等教程,带你从零开始系统性的学好Python!

python03011的博客 6720

python+selenium+ Chrome 运行中更换userAgent

通常情况下用selenium开发爬虫时,会使用以下方式添加UA chrome_options.add_argument('user-agent=' + self.ua) 但是每次更换需要重启浏览器,这会造成资源浪费。好在selenium支持CDP,于是翻了文档终于找到了解决方法。解决方法如下: driver.execute_cdp_cmd("Emulation.setUserAgentOverride", { "userAgent": "Mozilla/5.0 (Windows NT 6.

u014762853的博客 3672

【Python抢票神器】火车票枪票软件到底靠谱吗?实测—终极攻略。

好啦!这款Python实现12306查票以及自动购票的小程序写到这里就正式over了!大家还想看爬什么的可以跟我讲撒!评论区留言即可!👇。

xy258009的博客 3194

利用Python selenium在网站自-动-买-票实战分析

作者:小成Charles 原创作品 转载请标注原创文章地址: 一、前言 事情是这样的,由于每天早上去图书馆都要提前在互动吧网站上蹲点抢票,挺麻烦的,然后我老爸说,你怎么不自己写一个抢票软件,一句点醒了我,于是这款抢票程序来了。 二、思路设计 对于抢票这样的程序,难点并不是在写代码上,主要难点在于对网站源码的分析以及奇奇怪怪的情况的处理,这里选用Python作为脚本语言。我们利用selenium+chromeDriver模拟浏览器的登录。因为我们是用电脑模拟人点击,所以我们要知道订票所需要的所有步骤,这样才

weixin_42999453的博客 1374

chatgpt赋能python:Python抢票教程:快速抢到心仪的票

Python抢票是指利用Python编程语言编写脚本程序,通过模拟人的行为在短时间内完成在网上抢票的过程。Python作为一种功能强大又易学易用的开发语言,成为了进行抢票的首选。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。

m0_56069948的博客 2285

在线互动学习网站(源码+数据库+报告)

基于SpringBoot的在线互动学习网站,系统包含三种角色:管理员、老师、学生,系统分为前台和后台两大模块

shaoweijava的博客 576

教程五 在Go中使用Energy创建跨平台GUI - 执行开发者工具方法

执行开发者工具方法 通过chromium字典值,例如设置浏览器模拟APP, 窗口显示百分比,浏览器头.

杨红岩 1060

Python自动抢票脚本实战指南

简介:本文介绍Python如何实现自动抢票脚本,涉及模拟登录、验证码识别、实时监控余票、数据解析和订单提交等技术要点。脚本工作原理是模拟用户在浏览器上的购票操作,使用requests库发送HTTP请求,BeautifulSoup或PyQuery库解析HTML页面,处理登录状态、验证码、信息查询和提交订单等功能。同时强调异常处理机制和合法使用的重要性。

weixin_27645199的博客 4002

爬虫自动化抢票 12306

关键点:提示用户输入起始站、终点站和出发日期,然后转换为 12306 需要的编码。关键点:使用 Selenium 模拟用户在网页上的操作,如填写表单、点击按钮等。关键点:构建请求 URL,模拟浏览器发送 HTTP 请求获取数据。当然,下面我将重点介绍每个步骤的关键点,并附上相应的代码片段。关键点:从 12306 的 JS 文件中解析站点的三字码。关键点:解析服务器返回的 JSON 数据,并使用。

x1343676的博客 3万+

Python实现12306 抢票小助手(速通)

这段代码主要是利用 Python 的 Selenium 库来实现自动化操作 12306 网站,完成登录、输入行程信息以及查询和抢购指定车次车票的功能。下面我们将逐步分析代码中的各个关键部分。

NiJiMingCheng的博客 8772

互动吧hudongba前端源码.zip

互动吧前端源码,可再开发

基于selenium实现大麦网自动抢票脚本教程

通过使用chromedriver和selenium库,我们可以编写一个简单的大麦网自动抢票脚本。但要注意,自动抢票可能存在违反平台规则以及法律风险等情况,在使用时需要谨慎并确保自己的行为合法合规。同时,也希望票务平台能够不断优化售票机制,让更多真正有需求的用户能够公平的购买到门票。

2401_83283514的博客 2万+

Unity抖音小游戏上架实战:从零到一,详解流程与避坑指南

本文详细介绍了Unity抖音小游戏上架的全流程,包括环境准备、SDK集成、开发者账号注册、软著申请、打包提交流程及常见问题解决方案。重点解析了抖音小游戏平台特有的配置细节和避坑技巧,帮助开发者高效完成游戏上架并优化用户体验。

weixin_33704234的博客 261

【Python】利用selenium实现自动抢票(ticket星球网页版)

最近在学习python里selenium库的使用,正好当前各种演唱会纷飞,可以用来测试。目前开发的程序只适用于票星球网页非选座版,app和要选座版暂未开发,所以网页上能买票的才能运行该程序。

Mint-V的博客 4117

ADF4002分频器避坑指南:常见配置错误及解决方案

本文深入解析了ADF4002分频器在实战应用中的常见陷阱与解决方案。内容涵盖寄存器配置逻辑、硬件PCB布局要点、软件驱动时序细节及系统化调试方法,重点阐述了如何避免因配置错误导致芯片无法正常工作的问题,帮助工程师高效完成高精度频率合成系统设计。

weixin_29192141的博客 96

解密 vn.py 源码:从事件驱动到模块化设计的实战解析

本文深入解析vn.py源码,重点剖析其事件驱动机制与模块化设计。通过事件引擎、处理器字典等核心组件分析,展示如何实现低耦合高内聚的交易系统架构,并结合实战案例说明模块化设计带来的开发效率提升。文章还详细解读了Gateway抽象层、核心数据结构及设计模式应用,为量化交易开发者提供源码级实践指南。

weixin_27427619的博客 249

大麦网抢票程序(一)之大麦网网站分析

大家好,我是石璞东。 今年元旦,我要和王璐瑶去北京看德云社的演出,所以需要购买两张德云社小园子的门票,按照网上的说法,官方渠道只有大麦网一家,而且元旦期间黄牛抢票肯定异常激烈,对于我这么一个又穷、手速又慢(顺便@一下研究生院,咳咳咳,奖学金和助学金该发了哈,交表那么积极,就是不给钱)的人来说,只能握住最后一根救命稻草了,那就是代码咯~ 对的,你没看错,我们这次不去凑12306的热闹了,我们来搞一下大麦网。 工欲善其事,必先利其器,要实现某个网站抢票过程的自动化,我们必须对目标网站有足够清晰的了解,请看分析。

石璞东 1万+

Unity2019编译器下使用Ump无错误,打包exe不播放 或 将exe文件在其他电脑下运行不播放

一、unity编译器下使用UMP可以播放视频,打包后查看debug 出现错误 UnloadTime: 1.070900 ms Fallback handler could not load library F:/PCTest/AccessControlSysteam/jfmx_Data/Mono/libdl Fallback handler could not load library F:/PCTest/AccessControlSysteam/jfmx_Data/Mono/libdl.dll Fa.

qq_42345116的博客 4700

朋友圈疯传加速包抢票,还不如Python自动抢票来的靠谱!

  写在前面 一年一度的春运已经悄然来临,不知道身在异乡的你是否抢到一张回家的火车票 又有多少人因为一张小小的火车票而不能回家过春节。漂泊在外的游子在这个时候的乡愁就是一张小小的火车票 近日在朋友圈被一波抢票加速包疯狂刷屏了     小编在群里看得干着急,现在市面上各种平台的抢票软件都是收费的的,而且不能保证百分百能抢到票,很多小伙伴甚至被一些钓鱼网站骗钱了。这不是得...

weixin_44099558的博客 2483

瑞芯微RK3588部署YOLOv8模型

写下这篇博客进行记录,以防后面忘了怎么部署。

weixin_45303602的博客 3655

11、改进的加权轮询调度算法

本文详细介绍了对传统加权轮询(WRR)调度算法的改进方法,包括动态权重调整、优先级调度和预测机制,旨在提升系统的公平性、响应速度和适应性。通过设计与实现改进算法,并结合实验验证其在响应时间、资源利用率和公平性方面的显著提升,同时列举了该算法在数据中心、云服务平台、CDN及电商平台等实际场景中的应用案例。

day7的博客 190

Python实战,爬虫实战,用Python抢票

其中,关键的逻辑是如何获取验证码和提交订单,这需要我们仔细分析抢票网站的页面结构和HTTP请求过程。在实际抢票的过程中,网站上的座位信息一般都是要求用户通过手动点击的方式选择座位,因此我们需要写一些Python脚本,通过自动化操作,实现与网站交互,抢票代码的编写涉及到不同的网站和抢票情况,因此此处提供一个基本的抢票代码框架供参考。景中,就需要使用爬虫技术,抓取抢票网站的相关信息,以便在第一时间获取到票务信息。再结合爬虫技术,实时获取座位信息状态和票量信息,争取在第一时间预定到心仪的座位。

PHPcode123的博客 4827

使用lightGBM进行数据建模及预测

在机器学习领域中,数据建模和预测一直是非常重要的任务。而lightGBM作为一种基于梯度提升算法的高效机器学习框架,被广泛应用于数据建模和预测中。本文将介绍如何使用lightGBM进行数据建模和预测。到此,我们已经成功使用lightGBM对数据进行了建模和预测。使用lightGBM可以快速、高效地完成数据建模和预测任务,是机器学习领域中不可或缺的工具之一。使用lightGBM进行数据建模及预测。

qq_37934722的博客 1016
上一篇: 很多网站都是用得滑块验证码!Python搞定99%的网站!
下一篇: 2021最新python爬取12306列车信息自动抢票并自动识别验证码
pythonlaodi
博客等级 码龄6年 286粉丝 244原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值