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

最近演唱会还挺多的,都是大家喜欢的那些知名歌手,所以特地出一手教程给大家助力(主要是 表弟想追女神,所以教他自己抢票)

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

知识点

  • selenium 淘宝滑块处理
  • 抢购逻辑实现

必备环境

  • python 3.8
  • pycharm 专业版
  • 谷歌浏览器+谷歌驱动+selenium3.141.0
  • stealth.min.js

代码展示

模块

import time
from info import PHONE, PASSWORD
from selenium import webdriver
# 我还录制了视频进行详细讲解,跟源代码一起打包好了
# 都放在这个Q裙:708525271
# 直接加它领取

 

拿到移动轨迹,模仿人的滑动行为,先匀加速后匀减速。

def get_tracks(distance):
    # 初速度
    v = 5
    # 单位时间为0.2s来统计轨迹,轨迹即0.2内的位移
    t = 0.2
    # 位移/轨迹列表,列表内的一个元素代表0.2s的位移
    tracks = []
    # 当前的位移
    current = 0
    # 到达mid值开始减速
    mid = distance * 4 / 5
    while current < distance:
        if current < mid:
            # 加速度越小,单位时间的位移越小,模拟的轨迹就越多越详细
            a = 8
        else:
            a = -3
        # 初速度
        v0 = v
        # 0.2秒时间内的位移
        s = v0 * t + 0.5 * a * (t ** 2)
        # 当前的位置
        current += s
        # 添加到轨迹列表
        tracks.append(round(s))
        # 速度已经达到v,该速度作为下次的初速度
        v = v0 + a * t
    return tracks

 

登陆

# 1.1 打开浏览器
driver = webdriver.Chrome(options=options)
f = open('stealth.min.js', mode='r', encoding='utf-8').read()
# 移除selenium当中爬虫的特征
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': f})
# 1.2 打开登陆网页
driver.get(login_url)
# 1.3 输入账号, 输入密码, 点击登陆 (滑块)
try:
    # 进入内嵌页面
    driver.switch_to.frame(0)
    # 账号输入框: #fm-login-id
    driver.find_element_by_css_selector('#fm-login-id').send_keys(PHONE)
    # 密码输入框: #fm-login-password
    driver.find_element_by_css_selector('#fm-login-password').send_keys(PASSWORD)
    time.sleep(1)
    # 为什么会出现滑块, 用selenium打开的浏览器, 和正常用户打开的浏览器不同
    # 过滑块
    driver.switch_to.frame(0)
    slider = driver.find_element_by_css_selector('#nc_1_n1z')
    # 让鼠标执行 点击并且保持按住元素slider
    webdriver.ActionChains(driver).click_and_hold(on_element=slider).perform()
    # 横向移动鼠标
    webdriver.ActionChains(driver).move_by_offset(xoffset=260, yoffset=0).perform()
    # 松开鼠标
    webdriver.ActionChains(driver).pause(0.5).release().perform()
    driver.switch_to.parent_frame()
except:
    print("没有遇到滑块")
# 登陆按钮: #login-form > div.fm-btn > button
driver.find_element_by_css_selector('#login-form > div.fm-btn > button').click()
time.sleep(2)

 

下单

# 2.1 打开抢购页面
driver.get(target_url)
# 2.2 点击立即购买
driver.find_element_by_css_selector('.buybtn').click()
# 2.3 点击观影人
driver.find_element_by_css_selector('.ticket-buyer-select .next-checkbox-label').click()
# 2.4 点击同意并提交
driver.find_element_by_css_selector('.submit-wrapper .next-btn.next-btn-normal.next-btn-medium').click()
time.sleep(2)
 
driver.switch_to.frame(0)
slider2 = driver.find_element_by_css_selector('#nc_1_n1z')
tracks = get_tracks(300)  # 剩下的50%在模拟移动
webdriver.ActionChains(driver).click_and_hold(on_element=slider2).perform()
for x in tracks:
    webdriver.ActionChains(driver).move_by_offset(xoffset=x, yoffset=0).perform()
else:
    webdriver.ActionChains(driver).move_by_offset(xoffset=2, yoffset=0).perform()
webdriver.ActionChains(driver).pause(0.5).release().perform()

 

今天的内容就到这里结束了,觉得有帮助的话,顺手点个关注呗~

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

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用Python做一个抢票脚本,演唱会门票轻松到手! - Python技术站

(0)
上一篇 2023年3月31日 下午8:45
下一篇 2023年3月31日

相关文章

  • 挑战在代码里面不写for循环,让代码变得更简洁、规范、结构化,以及更好的代码可读性!

    哈喽兄弟们,又是新的一天!今天你敲代码了吗? 一、序言 为什么要挑战自己在代码里不写 for loop?因为这样可以迫使你去学习使用比较高级、比较地道的语法或 library。文中以 python 为例子,讲了不少大家其实在别人的代码里都见过、但自己很少用的语法。 自从我开始探索 Python 中惊人的语言功能已经有一段时间了。一开始,我给自己一个挑战,目的…

    Python开发 2023年4月2日
    00
  • 用Python做一个小说下载器,从获取数据到编写GUI界面

    对于广大书虫而言,没有小说看是最痛苦的,你身边有这样的人吗? 今天咱们分享一个小说下载器代码,打包成exe后,发给你的小伙伴也能直接使用… 思路流程 什么是爬虫? 按照一定的规则, 去采集互联网上面数据 爬虫可以做什么? 采集数据: 定制化采集数据 自动化脚本:自动点赞/评论/刷票/商品抢购脚本/自动发送弹幕 爬虫基本实现思路? 一、数据来源分析 明确需求:…

    Python开发 2023年3月31日
    00
  • 将表格内不一样的数据,用Python自动发送给不同的人,实现高效摸鱼

    事情是这样的,罪恶的资本家老板,快下班了给我发一个压缩包,让我把数据发给客户微信,搞完就可以下班了,我心想这么好,一个文件不是让我直接就提前下班吗,万万没想到… 我就知道,万恶的资本家怎么可能放弃剥削我的机会,我打开一看,一个压缩包里面放了几百个表格,一个表格里面N个人,几十万条数据,三个微信好友一万多人,我真的会谢…都特么四点了,这不是搞我吗?换别的同事,…

    Python开发 2023年4月2日
    00
  • 为了防止这个公众号被封,我连夜用Python爬取了它所有图片~

    哈喽兄弟们,今天来试试批量获取公众号文章,emmm…     虽然名义上是文章,单其实它是一篇纯图片文,至于为什么不是文字,小姐姐不比文字香?     事前准备     我们需要用到 Fiddler Everywhere 这个软件,Crack是本次要使用到的文件,以及要安装微信PC版客户端,我专门录了一个安装 及使用的教程。 本次使用的是Python3.8 …

    2023年4月2日
    00
  • 重温Python基础——变量

    哈喽兄弟们,今天我们来复习下变量。 首先尝试在一个hello_world.py文件中使用变量,在文件开头添加一行代码,并对第二行代码进行修改,如下所示: message=”hello world” print(message) # Python源码/教程领取扣君羊:279199867 运行这个程序,会与 print(“hello world”) 相同。 我们…

    Python开发 2023年4月2日
    00
  • Python实现批量将文件按分类保存,文件再多,只需一秒钟解决

    当我们电脑里面的文本或者或者文件夹太多了,有时候想找到自己想要的文件,只能通过去搜索文件名,要是名字忘记了的话,那你也搜不了吧,当然你可通过后缀名去搜索,但是通过搜索出来的文件只会更多,这还只是文件多的情况下。 如果文件名字基本一样,只有序号不一样呢?那特么眼睛看瞎了估计还没找到。 那么我们可以用Python来对文件进行批量自动分类保存到文件夹,下次找的时候…

    Python开发 2023年4月2日
    00
  • 过年不让放炮,我用Python实现了1000响大地红的特效

    兄弟们,马上(还有13天)就要过年啦,今年能带对象回家了吗哈哈哈 新的一年,新的气象,穿上新衣准备过大年… 俗话说得好,这所谓放鞭炮就是来压邪祟,除恶的,但是近几年来都不让放炮了,搞得没有一点年尾,不过还好,2023年改革新政策!!!有一部分城市可以进行放鞭炮啦! 在新的一年里祝大家1、六六大顺,七星高照。2、新年快乐,龙马精神。3、官运亨通,美梦连连。4、…

    Python开发 2023年3月31日
    00
  • 用Python来做一个简单的学生管理系统(附源码)

    小学妹说要毕业了,学了一学期Python等于没学,现在要做毕设做不出来,让我帮帮她,晚上去她家吃夜宵。 当时我心想,这不是分分钟的事情,还要去她家,男孩子晚上不要随便出门,要学会保护好自己,于是我花了十分钟给她写了一个发过去,这下不用去她家了~     代码实战 主要代码,完整代码素材、包括其它版本学生管理系统代码,也有录制好的视频讲解,第八行代码自取即可!…

    2023年3月31日
    00
合作推广
合作推广
分享本页
返回顶部