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

大家好,我是石璞东。

今年元旦,我要和王璐瑶去北京看德云社的演出,所以需要购买两张德云社小园子的门票,按照网上的说法,官方渠道只有大麦网一家,而且元旦期间黄牛抢票肯定异常激烈,对于我这么一个又穷、手速又慢(顺便@一下研究生院,咳咳咳,奖学金和助学金该发了哈,交表那么积极,就是不给钱)的人来说,只能握住最后一根救命稻草了,那就是代码咯~

对的,你没看错,我们这次不去凑12306的热闹了,我们来搞一下大麦网。

工欲善其事,必先利其器,要实现某个网站抢票过程的自动化,我们必须对目标网站有足够清晰的了解,请看分析。

大麦网网站分析

大麦网网址:https://www.damai.cn/

同大部分主流网站一样,游客模式下,用户只能浏览网站的相关信息,如果需要进行买票等交互式操作,用户需要通过规定形式进行网站的登陆。
在这里插入图片描述

这里我们选择 扫码登录(请确保你的手机端已经安装 大麦 应用程序,并处于登陆状态),登陆之后我们打开浏览器控制台,选中 Application 选项卡,在控制台左侧 Storage 菜单中选中 Cookies 菜单,查看登陆成功之后的 Cookies 信息
在这里插入图片描述
我们知道,结合我们的上述需求,我们必须处于用户登陆状态下才可以进行后续选票、选座、核对订单、支付等操作,在游客模式下无法进行上述任何操作。

关于大麦网,这里插一句题外话,这几天我在重新写我大三时候爬过的网站的相关案例,最为深刻的感受就是:网站更新太快了,用一句话来形容爬虫与反爬虫,就是 道高一尺,魔高一丈,而类似大麦网、猫眼电影这些网站,他们的反爬措施几乎为零,我也是很纳闷呀,难道大麦网、猫眼电影等觉得他们的数据信息毫无价值吗?还是说他们的服务器能够承受得住这些流氓爬虫所带来的流量呢?甚至是说,他们已经非常大度了,犯不着去跟这些小蜘蛛计较呢?

抢票过程思路分析

  • 用户登录

通过上述对登陆状态与游客模式的分析,我们知道,要想顺利完成抢票的全过程,我们首先要做的第一步就是获取用户登陆的Cookies,并保证抢票过程始终处于登陆状态下;

  • 选择节目

当我们登陆之后,在输入框中输入关键词 德云社,进入到德云社各个小园子演出信息的列表详情页面中:
在这里插入图片描述
此时我们即可选择想要观看的演出场次,这里会有两种可能:

  1. 无票(票被抢完了)
    在这里插入图片描述
    该页面有一个显著的特点,会存在一个 提交缺货登记 的按钮,在该情况下,我们要做的就是不断请求目标页面,直到有新的演出票信息放出,即 提交缺货登记 按钮被替换成其他与购票相关的按钮(即第二种可能性中所提及的 选座购买 按钮)。

  2. 有票
    在这里插入图片描述
    该页面有一个显著的特点,就是页面中会有 选座购买 按钮,在该情况下,我们要做的就是在选择好日期、场次和票档之后,点击 选座购买 进入到 座位选择 页面。

  • 选座购买
    在这里插入图片描述

大麦网只允许个人同时购买不超过2张演出票,该页面有一个显著的特点就是会有一个 确认选座 按钮,所以自动程序要帮助我们完成的就是,当用户选择好自己想要的位置之后,自动点击 确认选座 按钮,进入到 确认订单 页面;

  • 确认订单
    在这里插入图片描述

当我们点击 确认选座 按钮之后,我们会进入到 确认订单 页面,受限于网速的影响,我们判断该页面是否加载完成的依据就是是否出现 观演人信息,当相关信息加载完成之后,我们就可以点击页面底部的 同意以上协议并提交订单 按钮提交咯。

  • 支付页面
    在这里插入图片描述

进入到支付页面之后,我们同样需要等待网页完成加载,其判断标准就是 是否出现支付二维码,即上图网页源代码中所框选的id为container的div标签是否被渲染出来,若已经完成渲染,则代表已经抢票成功,用户所需要做的就是点击按钮并完成付款,如果没有出现,则重新开始下一轮的抢票。

好的,以上就是大麦网抢票的一个整体流程,小伙伴们学会了吗?快来梳理一下思路吧,在下一篇文章中,我们将介绍完成此案例必备的一些基础知识要点。

写在最后

为方便读者了解更为详细的信息,我为小伙伴们提供了三个我的官方渠道:

  • hahaCoder(微信公众号)
  • hahaAI(微信小程序)
  • hahaWebsite. (个人网站)
### 猫眼平台自动化脚本实现 对于猫眼平台的自动化脚本,可以采用 Python 结合 Selenium 库的方式完成。Selenium 是种用于 Web 浏览器自动化的工具,能够模拟人类操作浏览器的行为。 #### 导入必要的库 为了构建此脚本,需导入如下模块: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.common.keys import Keys from selenium.webdriver.chrome.service import Service from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time ``` 这些包提供了访问 WebDriver API 的接口以及处理页面加载等待等功能[^1]。 #### 初始化 WebDriver 和设置选项 创建 ChromeDriver 实例并配置启动参数,比如无头模式(headless mode),这允许在不打开实际浏览器窗口的情况下运行测试。 ```python options = webdriver.ChromeOptions() # options.add_argument('--headless') # 如果不需要显示界面可开启该行 service = Service(executable_path='/path/to/chromedriver') driver = webdriver.Chrome(service=service, options=options) ``` 确保 chromedriver 已经安装并且路径正确指定。 #### 登录过程 登录通常是通过输入用户名密码或者扫描二维码等方式来进行身份验证。这里假设已经获取到了有效的 cookies 或者可以直接跳转到已登录状态下的 URL 地址。 ```python login_url = 'https://passport.maoyan.com/normal/login' driver.get(login_url) # 假设使用账号密码登录方式 username_input = driver.find_element(By.NAME, "email") password_input = driver.find_element(By.NAME, "pwd") username_input.send_keys('your_username') password_input.send_keys('your_password') submit_button = driver.find_element(By.CLASS_NAME, "btn-login") submit_button.click() time.sleep(5) # 等待页面加载完毕 ``` 注意:如果网站有验证码机制,则需要额外考虑如何绕过或解决这个问题。 #### 定位目标商品并下单 旦成功登陆之后就可以定位想要购买的商品链接,并尝试提交订单请求。 ```python target_ticket_page = 'https://maoyan.com/show/<ticket_id>' driver.get(target_ticket_page) buy_now_btn = WebDriverWait(driver, 10).until( EC.element_to_be_clickable((By.LINK_TEXT, "立即预订")) ) buy_now_btn.click() confirm_order_btn = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "J_confirmOrderBtn")) ) confirm_order_btn.click() ``` 上述代码片段展示了怎样找到特定按钮并通过点击触发下步动作,在这个过程中可能还需要填写收货地址等相关信息视具体需求而定。 #### 错误处理与异常捕获 考虑到网络波动或者其他不可预见的因素可能导致程序中断,因此建议加入 try-except 结构来增强稳定性。 ```python try: ... except Exception as e: print(f"An error occurred: {e}") finally: driver.quit() # 关闭浏览器实例 ``` 以上就是基于 Python 和 Selenium 构建猫眼平台自动化脚本的大致流程。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hahaCoderX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值