此篇文章主要是为了教大家如何使用pyppeteer,切勿用于非法用途,否则后果自负!

回归正题!今天猫哥要讲的内容是,利用pyppeteer购买某麦网演唱会门票。作为技术交流,猫哥只实现了基本的功能!

实现原理:首先,我们无需破解其登录,直接通过手机扫码进入主页面。其次,通过访问我们的目标网址(也就是,我们想要抢的那场票。例如:抢刘德华的票,那么目标网址就直接定位到刘德华的预定页面)。然后,通过不断的监控、刷新页面,来选座、预定。最后,如果预定成功,则添加观影人,提交订单。如果预定失败,就返回预定页面,继续刷新,直到预定成功,提交了订单为止。

入口函数 dmspider.py 文件,此文件功能主要是调用pyppeteer的执行以及调用种子url。因为我们的spider文件中不可能只放一个爬虫,也不是所有的爬虫都会用pyppeteer去执行,所以就将其定义为middlewares中的一个功能,用时直接调用。

# -*- coding: utf-8 -*-
import scrapy
class DmspiderSpider(scrapy.Spider):name = 'dmspider'allowed_domains = ['damai.cn']# start_urls = ['http://damai.cn/']# 爬虫的设置custom_settings = {"DOWNLOADER_MIDDLEWARES": {'DMTickets.middlewares.FundscrapyDownloaderMiddleware': 260,}}def start_requests(self):# url = "https://www.damai.cn/"url = "https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F"yield scrapy.FormRequest(url=url,callback=self.parse,meta={"usePypp": True},dont_filter=True,)def parse(self, response):print("success!")

利用pyppeteer去访问种子URl,我们的种子URL其实就是某麦网的登录页面。登录过程我们是利用手机扫码登录,也就是说当pyppeteer将登录页面加载出来后,我们要用自己的手机扫码登录。登录后,通过判断我们昵称是否一致,来确定是否登录成功,然后再进行下一步操作。

async def usePyppeteer(self, request):num = random.randint(3, 6)await asyncio.sleep(num)# UA 随机更换UAawait self.page.setUserAgent(random.choice(self.user_agent))await self.page.setViewport({'width': 1366, 'height': 768})# 是否启用JS,enabled设为False,则无渲染效果await self.page.setJavaScriptEnabled(enabled=True)try:await self.page.goto(request.url, options={'timeout': 30000, "waitUntil": "networkidle2"})except Exception as e:print(e)print("error" * 100)# 注入JS, 绕过浏览器检测await self.page.evaluate("""() =>{Object.defineProperties(navigator, {webdriver:{get: () => false}})}""")await self.page.evaluate('''() =>{Object.defineProperty(navigator, 'languages', {get: () => ['en-US', 'en']});}''')await self.page.evaluate('''() =>{Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5,6], }); }''')# num = random.randint(3, 6)await asyncio.sleep(10)content = await self.page.content()content = etree.HTML(content)nick_name = content.xpath("//div[@class='span-box-header name-user show']/text()")[0]print(nick_name)# 获取昵称,判断账号是否登录成功!注:此昵称要改为自己的昵称if nick_name == "猫哥":# 不断循环,检测是否可以购买while True:page = await self.choose_tickets()if page:while True:page = await self.submit_order()if page:time.sleep(3000)else:continueelse:continue

登录成功后,进行选座、订票。此处猫哥只写了个简单的订票功能,大家可以根据自己学到的知识自行补充,完善功能,猫哥就直接上代码了。

# 选票功能 此处大家可以自由发挥,自行添加更多功能async def choose_tickets(self):await self.page.goto(self.target_url, options={'timeout': 30000, "waitUntil": "networkidle2"})# 添加选座功能# await self.page.click(".perform__order__select perform__order__select__performs > div.select_right > div.select_right_list > div.select_right_list_item")# await self.page.click(".perform__order__select > div.select_right > div.select_right_list > div.select_right_list_item sku_item")# buybtn = await self.page.xpath("//div[@class='buybtn']//text()")content = await self.page.content()content = etree.HTML(content)buybtn = content.xpath("//div[@class='buybtn']//text()")if buybtn:if buybtn[0] == "立即预订" or buybtn[0] == "立即购买":await self.page.click(".buybtn")await asyncio.sleep(1)return Trueelse:return Noneelse:return None

预定成功后,就可以提交订单了。不过此处有一个坑,大家要注意了。因为有些演唱会的门票需要实名认证,这个大家要提前在自己的账号中添加好购票人,需要实名认证的,要提前认证。要不然最后提交的时候,如果没有添加购票人,就会提交失败!

# 提交订单async def submit_order(self):content = await self.page.content()content = etree.HTML(content)order = content.xpath("//div[@class='submit-wrapper']/button/text()")if order:print("exit order!")# content = await self.page.content()# print(content)try:await self.page.click(".next-checkbox-label")await self.page.click(".submit-wrapper > button")return Trueexcept Exception as e:print(e)return await self.choose_tickets()else:return None

以上就是某麦网抢票的所有过程,看过我以前文章的朋友,估计一眼就能看出来,这个和12306抢票软件源码详解是一个原理。
好了,今天的分享就到这里。下面我放一个GitHub的源码链接,喜欢的朋友帮猫哥start一下哈~

猫哥公众号,欢迎大家关注!主推数据挖掘、数据分析和机器学习~

利用pyppeteer自动购买某麦网演唱会门票相关推荐

  1. Python自动化 —— 大麦网自动抢购原价演唱会门票

    最近,演唱会的举办越来越多,刚好我的一位同学喜欢听演唱会,就问我能不能帮他写一个自动抢演唱会门票的脚步,小编花了一个星期的时间研究和实践,成功写了一个简易版的自动抢票脚步.今天,我就分享一下我在写脚步 ...

  2. 【Python脚本】Python自动大麦网抢票,准点原价秒杀演唱会门票,拒绝黄牛交易!从我做起!!!1

    文章目录 前言 一.分析购票过程 二.Selenium 模拟浏览器操作 三.逆向工程:抢票接口 总结 前言 你是否错过了周杰伦的票,最近又没抢到五月天的票,不要太难过,今晚有张学友的票,后天还有张杰的 ...

  3. 如何抢演唱会门票,AI给你一套超强攻略

    有的歌手的演唱会门票不会放在一个平台,以应该提前做好攻略,那么对于我这种新手小白该如何抢到票呢,其实我们可以通过AI去找到解决办法 1.打开多御浏览器.找到ChatGPT进入页面 二.提前准备好你想去 ...

  4. 演唱会门票1秒钟就没了?没错,跟你竞争的不是人……

    全文共2909字,预计学习时长6分钟 图片来源:华盖创意 一票难求,似乎是我们的日常. 周杰伦巡演演唱会门票不到1秒被抢光.春节火车票不到1分钟后就显示无票-- 觉得日子太艰难?其实,一票难求,绝不只 ...

  5. 用Python做一个抢票脚本,演唱会门票轻松到手!

    最近演唱会还挺多的,都是大家喜欢的那些知名歌手,所以特地出一手教程给大家助力(主要是 表弟想追女神,所以教他自己抢票) 知识点 selenium 淘宝滑块处理 抢购逻辑实现 必备环境 python 3 ...

  6. 永远抢不到原价演唱会门票?来试试窗口同步功能吧

    自从疫情放开以来,越来越多演出也开始恢复.别看龙哥平时只爱和大家分享跨境电商,其实私底下龙哥也是个演出迷,基本上国内比较红的歌手龙哥都会去.不过龙哥从来不买黄牛票,一是觉得没必要,龙哥只是听个响:二是 ...

  7. 程序员大战黄牛党,破解演唱会门票秒光之困

    反黄牛,为何是场持久战? 撰文 | 林秋艺 编辑 | 龚   正 这个五月,似乎都被五月天霸屏了.从5月9日的30万张五月天演唱会门票被5秒扫光:到粉丝群起反抗,喊出"宁可鸟巢门口站,也不能 ...

  8. 基于JAVA演唱会门票订售及管理系统计算机毕业设计源码+系统+lw文档+部署(2)

    基于JAVA演唱会门票订售及管理系统计算机毕业设计源码+系统+lw文档+部署(2) 基于JAVA演唱会门票订售及管理系统计算机毕业设计源码+系统+lw文档+部署(2) 本源码技术栈: 项目架构:B/S ...

  9. linux(以ubuntu为例)下Android利用ant自动编译、修改配置文件、批量多渠道,打包生成apk文件...

    原创,转载请注明:http://www.cnblogs.com/ycxyyzw/p/4555328.html  之前写过一篇<windows下Android利用ant自动编译.修改配置文件.批量 ...

最新文章

  1. Visual Studio 2013编译Mozilla NPAPI 示例注意事项
  2. ubuntu9.10安装文泉驿微米黑字体
  3. 关于actionprovider
  4. ASP.NET 4新增功能(三) 对Web标准的支持和辅助功能的增强
  5. pyinstaller---将py文件打包成exe
  6. (王道408考研数据结构)第五章树-第四节2:平衡二叉树(AVL)及其旋转
  7. .net项目进不去后台解决
  8. 谷歌浏览器xp32位_如何正确的配置系统的浏览器系列篇(五)——合同管理系统...
  9. 大华设备播放过程中设置播放速度
  10. UVA 1391 - Astronauts(2-SET)
  11. Java开发设计——七大原则
  12. 土地资源管理就业怎么这么难_我所理解的土地资源管理专业
  13. 如何解决chrome浏览器地址栏变黑色(chrome搜索栏变黑)(mac电脑)
  14. 记录nginx获取的真实ip多了 的问题
  15. R 回归 虚拟变量na_R语言 | 生存分析之R包survival的单变量和多变量Cox回归
  16. android系统最近删除照片,安卓手机最近删除的照片怎么恢复?专家教你这样做...
  17. ad中pcb双面板怎么设置_PCB双面板的画法及布线技巧
  18. 简历,求职求项目,硕士-4年工作经验-2年管理经验
  19. 抖音神曲是如何“造”出来的?
  20. 读 Eric S. Raymond 大教堂与市集

热门文章

  1. 树莓派sd卡格式化_利用树莓派和移动硬盘搭建下载机,常见视频网站都可下载...
  2. C#语言实例源码系列-实现Linq操作Xml
  3. 喜茶门店总数超过650家,深圳单城市突破100家店
  4. 实战内容(13)- Invalid audio stream. Exactly one MP3 audio stream is required.
  5. 基于RT-Thread系统的迷你时钟
  6. 键盘的工作原理和分类
  7. 微信语音保存到本地服务器,文件格式由amr转mp3
  8. web程序中获取当前地理位置
  9. Mapwingis添加图层,实现label
  10. 成功没有捷径python_成功路上没有捷径说说 成功需要过程的句子