打球却没订到场地?Python自动化帮你搞定

js脚本自动抢羽毛球场地 基于油猴JavaScript脚本自动抢羽毛球场地——以CUC手球馆为例 我们学校只有室内的羽毛球场地,所以手球馆位置十分有限,需要每天8点整准时进入微信链接才能抢,还不一定能抢到。所以不妨写一个简单的脚本通过模拟点击来帮助我们抢,也有助于我们锻炼身体。 阅读详情
AI摘要

本文分享了一个Python自动化脚本,用于抢订热门运动场地。通过selenium操作浏览器,绕过图形验证码,实现定时刷新页面,自动抢订羽毛球、足球等场地。代码详细解析了如何切换窗口、选择预订时间和滑动页面等关键步骤。

640?wx_fmt=png

炎热的夏天,正是换上短裤短裙晒身材的时候。 但是,身材不好怎么办? 运动是一个选择,特别是像我们程序员行业,天天坐在空调办公室,更应该出出汗,正所谓: 冬练三九,夏练三伏。

下班后,约上公司的妹子,打打羽毛球,还没很惬意的事情嘛。

妹子满脸微笑的问你,周五几号场地啊?

你却说,没订到场地(尴尬,逃。。。

求生欲极强的 pk 哥接着说,但是,我写了一套 Python 自动化抢票的程序,每次临近打球的时间点,会有人转让或者退掉的,用这套程序就能实现自动化定场地了。

妹子问,那这程序怎么用呢?你能给我分析分析讲解讲解吗?

效果展示

我们以周五一个时间段为例,这个时间段有些场地是没被预定的,我们用这程序能否正常预定成功?

上面视频执行完成后,我就会收到预订成功的邮件通知,在 10 分钟内付款就预订场地成功了。

640?wx_fmt=jpeg我预定的是羽毛球场地,当然,这个网站还可以预订足球、篮球、网球等,输入关键字即可查找。

项目环境

语言:Python编辑器:Pycharm浏览器:Chrome

准备工作

我们要用 selenium 库操作浏览器进入预订场馆的官网,这时候的一个难点就是怎么绕过登录,因为我们看到,登录页面是需要输入加了噪音的图形验证码,要解这个图形验证码很麻烦,需要去噪点,切割建模,图像识别,而且最终识别率不是很高。

640?wx_fmt=png

pk 哥之前的文章里介绍过怎么绕过网站的登录的方法:讲讲Python爬虫绕过登录的小技巧(链接可点击跳转),这个项目用了其中一种,启动带有缓存信息的 Chrome 浏览器来绕过图形验证码成功登录。

当然,我们需要事先手动登录定场地的网站,这时的网站就缓存了你的登录信息。

然后我们用文章里说的方法绕过图形验证码,从而绕过网站的登录,具体解析看这篇文章 讲讲Python爬虫绕过登录的小技巧(链接可点击跳转)

640?wx_fmt=png

浏览器驱动问题

解决登录的问题后,我们就可以打开我们指定的网站了。

driver.get(url)

这时,可能会遇到一点小插曲,如果运行代码出现浏览器驱动提示的问题,提示我们浏览器驱动的版本和浏览器不匹配。

640?wx_fmt=png

先检查下之前有没有下载 chromedriver,并放在 Python 安装的根目录下,有安装的话那就是版本不匹配,可能由于 Chrome 浏览器自动升级导致。

Chrome 驱动下载链接:

http://npm.taobao.org/mirrors/chromedriver/

下载对应版本的驱动,放在 Python 安装的根目录下,替换之前旧的驱动即可。

比如我的 Chrome 浏览器版本是 76.0,那我需要下载 chromedriver 版本也是 76.0.

640?wx_fmt=png

源码分析

接下来我们分析下打开的官网链接。

分析链接

我们登录官网后,默认所在的地区是广州,当我选择自己的所在地上海时,这时地址后会加上城市 id 的参数 city_id。

640?wx_fmt=jpeg

这时,我们在搜索框中输入我们需要预订的场馆,点击查询,这时参数后面多了个搜索文本的参数 search_text。

640?wx_fmt=png

我们去掉参数中的 random,和上面的 city_id 进行组合,最终的链接如下:

http://quyundong.com/search/searchResult?city_id=321&search_text=上海霜天羽毛球馆

这个链接打开的页面和上面是一样的。

这时,我们构建一个打开指定网址的方法,我们把 city_id 和 search_text 两个值作为参数。

640?wx_fmt=png

这时我们开始操作页面进行预订,我挑几个重要的步骤给大家解析下。

切换新窗口

当我们在上面的页面点击立即预订按钮时,浏览器会新打开一个窗口,这时,selenium 还是会停留在上一个页面,我们需要切换到新窗口。

n = self.driver.window_handles           # 获取当前页句柄
self.driver.switch_to.window(n[1])       # 切换到新的网页窗口

选择预订时间

我们看到预订的日期每天是变动的,但是,也有不变的部分,也就是星期,通过代码调试,我们发现,这个日期是一个可调整的 href 超链接,星期是日期中的一部分。

640?wx_fmt=png

所以我们用 selenium 中点击超链接文字中的部分文字来实现预订时间的选择。

driver.find_element_by_partial_link_text('周五').click()

滑动页面

我们知道,页面元素如果没有出现在页面可见区域,可能定位元素时会报错。所以我们需要一个可以滑动页面到指定位置的操作。

比如,我想预订的时间段是 18:00-19:00,为了让这个区域出现在页面中,pk 哥采用的思路是滑动页面,让 场馆介绍 出现在屏幕底部。

640?wx_fmt=png

pk 哥用的方法是用 js 方法滑动页面。

scrollIntoView(false)

上面方法表示滑动页面,使指定的元素出现屏幕底部,具体写法如下:

scroll = "document.getElementById('detail').scrollIntoView(false)"  # 滚动屏幕,使元素出现在屏幕底部
self.driver.execute_script(scroll)

这里,我把预订星期和滑动功能一起封装成一个方法,并把预订时间作为参数。

640?wx_fmt=png

循环判断场地状态

这时关键的一步,我们需要判断我们要订的这些场地的状态是否是可预定的,我们需要的场地如果全部不可预订的话,我们就隔一段时间刷新页面,重新判断。如果可以预订,就点击提交订单。

我们先来看看场地预订的状态判断,通过调试,我们发现,场地 td 标签中 status 表示预订的状态,其中 status 值为 0 的时候表示该场地可以被预订,当 status 值不为 0 时表示该场地不可被预订。

640?wx_fmt=png

预订指定场地

上面的图中我们看到,每个时间段内有 9 个场地,前三个是 VIP 场地,价格是后面普通场地近 2 倍,根据我实地考察来看,VIP 场地没什么优势,所有我只想预订第 4 号到第 9 号场地。

我们复制某个时间的某个场地的 xpath,我们发现,xpath 前面都是一样的,不同的场地由后面的 td[] 决定,比如 td[4] 就表示第 4 号场地。

我们用个 for 循环,把 td[] 里的数字格式化就可以了。

for i in range(4, 10):    # 我只需要预定第4列和第9列的场地,也就是4号到9号场地
    site = self.driver.find_element_by_xpath('//*[@id="booking"]/div[3]/div[1]/table/tbody/tr[9]/td[{}]'.format(i))

发送邮件

如果有场地可预定的话,就会自动点击场地并提交订单、确定订单、选择支付方式,发送邮件。

发送邮件的方法可以参考之前的旧文:30行Python代码实现自动收发邮件(链接可点击跳转)

代码稍做了修改,放在和本项目同一目录下,就可以在本项目中直接导入了。

640?wx_fmt=png

在本项目中导入发送邮件的方法,当预订场地成功提交订单后,调用发送邮件的方法,然后退出 while 循环。

预订场地的部分代码如下:

640?wx_fmt=png

判断完 4 号到 9 号场地后,如果没有场地后,页面随机等待 10 到 15 分钟后刷新页面,这个时间可以自行修改,不要设置时间太短太有规律而被禁 ip 就行。

最后,输入你要预订的场地名和预订的星期,调用函数运行即可达到我文章开头的效果。源码回复:「运动」获取。

python实现一键体育馆场地、羽毛球场预定功能及其web服务部署(以武汉大学为例) python实现羽毛球场预定功能 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、实现步骤二、实现方案1.引入库2.登陆模块3.查询模块4.下单模块三、web端实现四、注意事项 前言 现在手动抢球场真的很难,是时候解放双手了. Talk is cheap, show me the code 需要的库:conda 自带库,execjs, xmls 一、实现步骤 这里给大家贴一个前辈的探索,https://blog.youkuaiyun.com/baiguikai/article/d 阅读详情

相关推荐

THU羽毛球场预约脚本

这里需要手动选择是哪个体育场,如选择气膜馆,接下来脚本按按钮的顺序是,先点击类型(乒乓球/羽毛球),再点击日期,再点击时间和场地号,最后点击提交。如果想要自行改变预约的运动场类型、时间段、场地,需要手动查询网页中对应的XPATH并粘贴到代码中。例如如果将场地类型改为紫荆网球场,则在网页中右击紫荆网球场对应的位置,点击“检查”,在弹出的网页源码中高亮的部分右击,选择copy–copy full Xpath,粘贴到。

Plutonjr的博客 1952

抢羽毛球场地脚本

【代码】抢羽毛球场地脚本。

weixin_47414034的博客 5682

Badminton-script:预定羽毛球场的脚本

预定羽毛球场的脚本 如何使用 请在预订前更新“ field”变量 python badminton.py 在微信上付款 要求 要求 回覆 哈希库

约妹子打球却没订到场地?Python自动化帮你搞定

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤少年易学老难成,一寸光阴不可轻。炎热的夏天,正是换上短裤...

pdcfighting的博客 1298

(2024.7可用)自动抢北邮本部羽毛球场,体育馆,健身房(已实现)脚本,bupt_bupt-gym.zip

(2024.7可用)自动抢北邮本部羽毛球场,体育馆,健身房(已实现)脚本,bupt_bupt-gym

华中科技大学专用羽毛球场地预约脚本。本简易脚本仅用作个人娱乐用途。

华中科技大学专用羽毛球场地预约脚本。本简易脚本仅用作个人娱乐用途。_HUST_Badminton_Booking_Script.zip_HUST_Badminton_Booking_Script

中山大学羽毛球场馆自动订场(Python+selenium+百度aip)

双鸭山南校人太多,小伙伴们日常约球抢不到室内的场馆,只好去室外打。所以趁考完试有时间写了一个自动抢羽毛球场的脚本,网好的时候20秒订场无压力。下面来分享一波这个脚本的一些技术细节(重点讲一下图像降噪和百度云的文字识别接口),也算是对我这两天学习的一个总结。 其实在大概在一年之前在自动操作浏览器上selenium+phantomjs还是标配,但是随着17年8月firefox和chrome相继推出了...

Notetaking 1万+

羽毛球场自动抢场程序_badminton_book.zip

羽毛球场自动抢场程序_badminton_book

aspose.word在某个字后面自动换行_约妹子打球却没订到场地?Python自动化帮你搞定...

正文:3161 字 18 图预计阅读时间:8 分钟作者:pk哥公众号:Python知识圈阅读文本大概需要 6 分钟。炎热的夏天,正是换上短裤短裙晒身材的时候。但是,身材不好怎么办?运动是一个选择,特别是像我们程序员行业,天天坐在空调办公室,更应该出出汗,正所谓:冬练三九,夏练三伏。下班后,约上公司的妹子,打打羽毛球,还没很惬意的事情嘛。妹子满脸微笑的问你,周五几号场地啊?你却说,没订...

weixin_35662085的博客 157

M1安装homebrew报错LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54解决方法

在mac系统中,使用homebrew可以很方便的管理包。但按照官网的说明执行命令时总是报错原因是这个资源访问有问题,那么我们可以直接使用国内的镜像。给大家推荐一个中国科学技术大学的镜像站点,里面有各种资源https言归正传,开始踩坑。......

qq_42427085的博客 1457

抖音用户主页视频数据爬虫详解(点赞,收藏,分享等)

的包中有个max_cursor参数,请求载荷中也有一个这样的参数,每次请求的数据中max_cursor是下一个请求的载荷,,,同时has_more为1时候代表还能请求,0为不能请求,我们做如下判断。最后发现cookie很容易过期,批量爬取有点困难,,,,我们采用drissoinpage进行自动化获取。首先进行抓包分析,,,随便找个主页,f12,关键词搜索,发现这个包是以post开头。请你第一次运行先按0,进行登录(或者触发反爬的时候),登录完成之后,按1进行爬取,完整代码请在知识星球。

m0_74823507的博客 3433

比 Selenium 更好用的新神器 Pyppeteer

作者:崔庆才来源:进击的Coder阅读文本大概需要 10 分钟。如果大家对 Python 爬虫有所了解的话,想必你应该听说过 Selenium 这个库,这实际上是一个自动...

苏克的博客 1864

GEOSHIELD:分布式CPS的拜占庭容错与安全防护技术

分布式系统在关键基础设施(如轨道交通、智能电网)中面临网络延迟和恶意节点的双重挑战。拜占庭容错(BFT)技术通过算法保证系统在存在故障节点时仍能达成一致,是保障系统安全的核心机制。GEOSHIELD创新性地结合概率化网络延迟测量和TGS动态信任评分,实现了不依赖可信硬件的拜占庭 resilience。该技术通过建立节点行为的信用档案,动态识别恶意行为,在保证安全性的同时最大化系统可用性。实验证明,即使在自适应攻击策略下,GEOSHIELD仍能保持系统95.6%的正常运行时间,为CPS系统提供了可靠的安全防护

weixin_31766003的博客 348

收藏!14张思维导图构建 Python 核心知识体系

点击上方Python知识圈,选择“设为星标”回复“1024”获取编程资料作者:ZOE链接:https://woaielf.github.io/2017/06/13/python3-al...

Python知识圈 291

osgEarth添加线特征

部分关键代码: osgEarth::Annotation::FeatureNode* pathNode = 0; osgEarth::Symbology::Geometry* path = new osgEarth::Symbology::LineString(); Track*track = dynamic_cast<Track*>(entity->getProperty(PS_TRACK)); if (track == nullptr) { return; } st.

wb175208的专栏 2968

统信UOS丨开机无法进入系统 无法打开控制台访问权限,root账号被锁定(cannot open access to console, the root account is locked)

步骤四:分别打开文件发现Roota下的fstab就是我们要找的文件,打开查看Roota的属性发现其为挂载的磁盘nvme0n1p3。步骤三:按Win+E打开文件管理器在分区中查找/etc/fstab文件,发现Roota和Rootb下都有该文件。步骤二:按键盘Ctrl+Alt+F4,进入终端控制台,如下图所示输入startx回车,进入桌面。步骤一:找到UOS系统安装的U盘,选择U盘启动进入安装界面,如下图所示。步骤七:关机,拔出U盘,启动电脑,OK,问题解决。

Reyn_观极 1万+

别只用 Selenium,新神器 Pyppeteer 绕过淘宝更简单!

点击上方Python知识圈,选择置顶或星标第一时间关注 Python 技术干货!作者:崔庆才来源:进击的Coder阅读文本大概需要 10 分钟。如果大家对 Python 爬虫有所了解的...

Python知识圈 356

智慧安防:基于Java+YOLOv8的视频AI识别平台设计与实现

张工,我们的园区智慧安防项目又出问题了!用Python写的YOLOv8 demo,拉3路RTSP流就卡,视频延迟超过5秒,入侵检测误报率太高,一到晚上光线差就全是误报,而且和我们的Java安防平台对接太麻烦,还要搭个消息队列,架构复杂得要死!“别慌,用Java+YOLOv8啊!

2601_94871597的博客 196

推荐一位零基础转行测试开发的Pythoner

今天给大家推荐一位精准 Python 类的公众号「Python 知识圈」,作者 pk 哥,一位从建筑行业转行互联网的坚持者,一位从刚开始只会功能测试的小白,到现在会 Py...

涛哥聊Python 430

CATIA 3DEXPERIENCE R2019x VBA开发介绍

CATIA 3DEXPERIENCE R2019x VBA开发介绍 一、 什么是VBA? 【VBA的官方解释】 VBA(Visual Basic for Applications)是VisualBasic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是MicrosoftOffice软件。它也可说是一种应用程式视觉化的 Basic 脚本。 CATIA提供了多种二次开发的接口,其中包括自动化对象编程(Automation)和

WorkMan的博客 5066

uniapp 如何封装实现任意页面都能使用的全局弹窗

项目内容场景全局监听消息提示难点uniapp 无法全局挂载组件解决方案动态创建 DOM + 动态 Vue 实例优势跨页面 / 不依赖页面组件树 / 灵活调用如果你使用的是小程序平台,DOM 操作可能受限,需要用或方式兼容处理。想支持多个弹窗堆叠?你可以扩展,加个弹窗队列管理器。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 946

抢票神器成GitHub热榜第一,支持候补抢票,Python跑起来 | 标星1.3W

点击上方Python知识圈,选择“设为星标”回复“1024”获取编程资料车栗子 发自凹非寺量子位 报道 | 公众号 QbitAI想要十一回家的小伙伴们,大概刚刚经历了一波抢票大战。...

Python知识圈 195

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

「只推荐一位」一个零基础转行测试开发的Pythoner

今天给大家推荐一位精准 Python 类的公众号「Python 知识圈」,作者 pk 哥,一位从建筑行业转行互联网的坚持者,一位从刚开始只会功能测试的小白,到现在会 Py...

胖虎 119

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Linus 在 Google 分享了 Git 的设计思路,顺带怼了一大波人(视频)
下一篇: 评分9.7,边看边用!这本Python书终于玩大了!
菜鸟学Python
博客等级 码龄9年 8089粉丝 571原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值