丹摩|丹摩助力selenium实现大麦网抢票

丹摩|丹摩助力selenium实现大麦网抢票

声明:非广告,为用户体验

1.引言

在人工智能飞速发展的今天,丹摩智算平台(DAMODEL)以其卓越的AI算力服务脱颖而出,为开发者提供了一个简化AI开发流程的强大工具。通过租赁GPU资源,丹摩智算平台使得机器学习和深度学习项目的开发变得更加高效和便捷。本文将详细介绍如何在丹摩智算平台上部署和使用selenium实现大麦网抢票

1.1背景

丹摩智算平台以其用户友好的界面和强大的技术支持,成为AI开发者的首选。它不仅提供了高性能的计算资源,还通过各种优惠活动吸引用户,进一步降低了AI开发的门槛。

1.2访问与登录

  • 访问地址:丹摩智算平台官网

  • 访问平台:使用支持的浏览器,如Edge/Chrome打开丹摩智算平台官网。

  • 用户登录:输入账号和密码登录。如果是首次使用,请先完成注册并完善个人信息。

请添加图片描述

1.3本次项目架构设计图

在这里插入图片描述

2.部署与使用

2.1.创建项目

  • 登录后,点击GPU云实例。

  • 创建实例:点击“创建实例”。
    在这里插入图片描述

  • 资源选择:选择适用的计算资源类型(如 CPU、GPU、内存需求等)。

由于我们这里选择3090 显卡,硬盘选择默认的 100GB 系统盘和 50GB 数据盘。
在这里插入图片描述

  • 镜像选择: PyTorch(PyTorch2.3.0,Ubuntu-22.04,CUDA12.1 版本)镜像。

在这里插入图片描述

  • 密钥对:创建并绑定密钥对,最后启动。

在这里插入图片描述

  • 进入 JupyterLab

在这里插入图片描述

  • 打开终端

在这里插入图片描述

2.2环境配置

导入selenium库:

pip install selenium

2.4开始运行

在这里插入图片描述

相关main.py代码:

import os
import time
import pickle
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By

# 抢票相关页面
# 大麦网主页
damai_url = "https://www.damai.cn/"
# 登录页
login_url = "https://passport.damai.cn/login?ru=https%3A%2F%2Fwww.damai.cn%2F"
# 抢票目标页
target_url = 'https://detail.damai.cn/item.htm?spm=a2oeg.home.card_0.ditem_1.2bbb23e1uo54LV&id=853329221023'

# 定义具体类
class Concert:
    def __init__(self):
        self.status = 0         # 状态,表示如今进行到何种程度
        self.login_method = 1   # {0:模拟登录,1:Cookie登录}自行选择登录方式
        self.driver = webdriver.Chrome()       # 默认Chrome浏览器
        self.execute_stealth_script(self)  # 执行stealth脚本

    # 执行stealth脚本
    # 机器检测问题,使用的driver会被识别为机器人,无法欺骗到检测程序,这里我们使用stealth.min.js进行解决。
    @staticmethod
    def execute_stealth_script(self):
        with open('stealth.min.js', 'r') as f:
            js = f.read()
            self.driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {'source': js})
            print('###已执行stealth脚本###')

    # 通过cookie进行登陆
    # 在Concert类中login_method = 1时才会使用到,便于快速登陆,省去登陆过程,其中初次运行代码时,用户登陆后会在本地生成cookies.pkl文件来存储cookie信息,用于快速登陆。
    def set_cookie(self):
        self.driver.get(damai_url)
        print("###请点击登录###")
        while self.driver.title.find('大麦网-全球演出赛事官方购票平台') != -1:
            sleep(1)
        print('###请扫码登录###')

        while self.driver.title != '大麦网-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':
            sleep(1)
        print("###扫码成功###")
        pickle.dump(self.driver.get_cookies(), open("cookies.pkl", "wb"))
        print("###Cookie保存成功###")
        self.driver.get(target_url)


    def get_cookie(self):
        try:
            cookies = pickle.load(open("cookies.pkl", "rb"))  # 载入cookie
            for cookie in cookies:
                cookie_dict = {
                    'domain':'.damai.cn',  # 必须有,不然就是假登录
                    'name': cookie.get('name'),
                    'value': cookie.get('value')
                }
                self.driver.add_cookie(cookie_dict)
            print('###载入Cookie###')
        except Exception as e:
            print(e)

    # 登陆
    def login(self):
        if self.login_method == 0:
            self.driver.get(login_url)
            # 载入登录界面
            print('###开始登录###')

        elif self.login_method == 1:
            if not os.path.exists('cookies.pkl'):
                # 如果不存在cookie.pkl,就获取一下
                self.set_cookie()
            else:
                self.driver.get(target_url)
                self.get_cookie()

    # 打开浏览器
    def enter_concert(self):
        """打开浏览器"""
        print('###打开浏览器,进入大麦网###')
        self.driver.maximize_window()           # 最大化窗口
        # 调用登陆
        self.login()                            # 先登录再说
        # self.driver.refresh()                   # 刷新页面
        self.status = 2                         # 登录成功标识
        print("###登录成功###")


    # 选择票型
    def choose_ticket(self):
        if self.status == 2:                  #登录成功入口
            print("="*30)
            print("###检查是否开始售票###")
            # while not self.isElementExistByClass('buy-link'):
            #     self.driver.refresh()
            #     print("###售票尚未开始,刷新等待开始###")
            # TODO 选择票型
            #========begin=========
            # 选择具体票型部分未写,该部分可自行添加,不添加的话,自行选择进入页面后大麦的默认选择。
            #========end===========
            self.driver.find_element(By.CLASS_NAME, 'buybtn').click()    #点击购票二维码下的购买连接
            time.sleep(1.5)
            self.check_order()

    # 确认订单
    def check_order(self):
        if self.status == 2:
            print('###开始确认订单###')
            if self.driver.title == '订单确认页':
                print('###检查是否需要填写观影人')
                # if self.isElementExistByXPATH('//*[@id="dmViewerBlock_DmViewerBlock"]'):
                #     self.driver.find_element(By.XPATH, '//*[@id="dmViewerBlock_DmViewerBlock"]/div[2]/div/div').click()
                #     time.sleep(0.5)
                # time.sleep(60)
                print('###跳转支付选择界面###')
                self.driver.find_element(By.XPATH, '//*[@id="dmOrderSubmitBlock_DmOrderSubmitBlock"]/div[2]/div/div[2]/div[2]/div[2]/span').click()
                time.sleep(2)
                self.pay_order()

    # 支付宝登陆支付
    def pay_order(self):
        if self.driver.title == "支付宝付款":
            print('###支付订单###')
            time.sleep(60)
            self.driver.find_element(By.XPATH, '//*[@id="app"]/div[3]/div[1]/button[2]').click()
            print('###跳转至浏览器支付###')
            time.sleep(1.5)
            self.driver.find_element(By.XPATH, '//*[@id="app"]/div[3]/div/div[1]/div[2]/input').clear()
            self.driver.find_element(By.XPATH, '//*[@id="app"]/div[3]/div/div[1]/div[2]/input').send_keys('支付宝账号')      #输入支付宝账号
            self.driver.find_element(By.XPATH, '//*[@id="app"]/div[3]/div/button').click()
            time.sleep(1.5)
            self.driver.find_element(By.XPATH, '//*[@id="app"]/div[2]/button').click()
            while True:
                time.sleep(1)
                print('###请输入支付密码###')

    # 脚本结束退出
    def finish(self):
        self.driver.quit()

if __name__ == '__main__':
    try:
        con = Concert()  # 初始化函数
        con.enter_concert()  # 打开浏览器
        con.choose_ticket()  # 开始抢票

    except Exception as e:
        print(e)
        con.finish()

2.5代码结果

成功实现大麦网抢票

在这里插入图片描述

2.6代码架构设计图

在这里插入图片描述

通过本文的详细指南,您可以轻松地在丹摩智算平台上部署和使用selenium实现大麦网抢票。

3.总结

本文详细介绍了如何在丹摩智算平台(DAMODEL)上部署和使用Selenium实现大麦网抢票的流程。丹摩智算平台以其强大的AI算力服务和用户友好的界面,为AI开发者提供了一个高效便捷的开发环境,降低了AI开发的门槛。

文章首先介绍了丹摩智算平台的背景和如何访问登录,然后详细阐述了项目的架构设计,并逐步指导用户创建项目、选择资源、配置环境以及部署Selenium代码。在部署与使用部分,文章提供了创建GPU云实例的步骤,包括资源选择、镜像选择和密钥对的创建。接着,通过Python代码展示了如何使用Selenium进行大麦网的抢票操作,包括登录、选择票型、确认订单和支付等环节。代码中包含了详细的注释,便于读者理解和学习。文章还提供了代码运行结果的截图,以及代码架构设计图,帮助读者更直观地理解整个抢票流程。

为了提高文章的质量,建议增加目标读者的明确性,提供更多关于丹摩智算平台的背景信息,确保步骤说明的清晰性和截图的准确性。同时,保持专业术语的准确性,确保语言风格的一致性,并进行彻底的校对以避免语法和拼写错误。最后,确保所有外部链接的有效性,以提升文章的实用性和可信度。通过这些改进,文章将更加专业、易于理解,为读者提供实用的大麦网抢票指南。

通过本文的详细指南,读者可以轻松地在丹摩智算平台上部署和使用Selenium实现大麦网抢票,体验到丹摩智算平台带来的便利和高效。丹摩智算平台的高性能计算资源和技术支持,无疑为AI开发者提供了强大的助力,使得复杂的抢票任务变得简单可行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/935646.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android系统(android app和系统架构)

文章目录 AndroidAndroid Apps四大组件 Android系统Platform API之下:一个微笑内核adb(Android Debug Bridge) Android包管理机制Android的Intent机制参考 Android LinuxFrameworkJVM 在Linux/Java上做了个二次开发?并不完全是:Android定义…

小程序开发中的插件生态与应用-上

更多精彩内容都在公zhong号:小白的大数据之旅 在小程序的开发过程中,插件作为扩展功能、提升效率的重要工具,扮演着不可或缺的角色。它们不仅能够帮助开发者快速集成复杂的功能模块,还能优化开发流程,缩短项目周期。 …

An error happened while trying to locate the file on the Hub and we cannot f

An error happened while trying to locate the file on the Hub and we cannot find the requested files in the local cache. Please check your connection and try again or make sure your Internet connection is on. 关于上述comfy ui使用control net预处理器的报错问…

Java 实现给pdf文件指定位置盖章功能

Java 实现给pdf文件指定位置盖章功能 开发中遇到一个需求, 需要给用户上传的的pdf文件, 指定位置上盖公章的功能, 经过调研和对比, 最终确定实现思路. 这里是使用pdf文件中的关键字进行章子的定位, 之所以这样考虑是因为如果直接写死坐标的话, 可能会出现因pdf大小, 缩放, 盖章…

Vmware的网络适配器的NAT模式和桥接模式有何区别?如何给Uubunt系统添加桥接网卡?

Vmware的网络适配器的NAT模式和桥接模式有何区别? 如何给Uubunt系统添加桥接网卡? 步骤如下:

主机连不上CentOS7虚拟机Redis

CentOS7中的Redis连不上主机 是否ping通 先尝试主机是否能Ping通虚拟机 虚拟机中查看ens33对应的地址,使用ifconfig 再在主机上尝试Ping,如果无法Ping通,先排除是否是虚拟机NAT或者桥接模式配置的问题 redis.conf配置 我是按照黑马的教…

vue element 切换 select 下拉框的 单选多选报错

今天根据项目需求,需要对下拉框进行,单双选判断,当多选切换成多选,没有问题但是单选切换成多选报错如下 页面是要求 选择in或者notin时候 多选 经过好长时间摸索,解决了,最后使用select的失去焦点事件解决的…

VBA高级应用30例应用在Excel中的ListObject对象:向表中添加注释

《VBA高级应用30例》(版权10178985),是我推出的第十套教程,教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开,这套教程案例与理论结合,紧贴“实战”,并做“战术总结”,以…

BA和CS算法中的Levy飞行策略

Levy飞行策略通过模拟自然界中动物的长距离迁徙行为,指导粒子进行更大范围的搜索,有助于算法快速找到全局最优解。它是一种具有独特优势的随机行为策略,模拟随机游走或搜索过程中的步长和方向,其步长的概率分布为重尾分布&#xf…

JavaEE多线程案例之阻塞队列

上文我们了解了多线程案例中的单例模式,此文我们来探讨多线程案例之阻塞队列吧 1. 阻塞队列是什么? 阻塞队列是⼀种特殊的队列.也遵守"先进先出"的原则. 阻塞队列是⼀种线程安全的数据结构,并且具有以下特性: 当队列满的时候,继续⼊队列就会…

[Maven]下载安装、配置与简介

很多框架的下载使用的流程和思路是差不多的,这里以maven做详细介绍。 下载安装与配置变量 下载 首先,我们要使用maven,必须先下载它的相关文件。想要下载,我们可以直接搜索maven。找到它的官网。这里不绕弯子,直接给出…

centos部署SkyWalking以及在springcloud项目中搭配loki使用

文章目录 场景SkyWalking介绍部署部署Storage [单机版Elasticsearch]部署SkyWalking OAP [下载地址](https://skywalking.apache.org/downloads/#SkyWalkingAPM)部署SkyWalking Java Agent springCloud 使用举例追踪ID写入loki 场景 SkyWalking是应用性能监控平台,可…

FastAPI vs Flask 选择最适合您的 Python Web 框架

文章目录 1. 简介2. 安装和设置3. 路由和视图4. 自动文档生成5. 数据验证和序列化6. 性能和异步支持结论 在 Python Web 开发领域,FastAPI 和 Flask 是两个备受欢迎的选择。它们都提供了强大的工具和功能,但是在某些方面有所不同。本文将比较 FastAPI…

xshell连接虚拟机,更换网络模式:NAT->桥接模式

NAT模式:虚拟机通过宿主机的网络访问外网。优点在于不需要手动配置IP地址和子网掩码,只要宿主机能够访问网络,虚拟机也能够访问。对外部网络而言,它看到的是宿主机的IP地址,而不是虚拟机的IP。但是,宿主机可…

常见的网络攻击手段

IP 欺骗 IP 是什么? 在网络中,所有的设备都会分配一个地址。这个地址就仿佛小蓝的家地址「多少号多少室」,这个号就是分配给整个子网的,「室」对应的号码即分配给子网中计算机的,这就是网络中的地址。「号」对应的号码为网络号…

酒店/电影推荐系统里面如何应用深度学习如CNN?

【1】酒店推荐系统里面如何应用CNN?具体过程是什么 在酒店推荐系统中应用卷积神经网络(CNN)并不是一个常见的选择,因为 CNN 主要用于处理具有空间结构的数据,如图像、音频和某些类型的序列数据。然而,在某…

Qt-chart 画柱状图

记录下&#xff0c;记录下 效果图 直接上代码 // 创建柱状系列 QBarSeries *series new QBarSeries();// 创建数据集 QBarSet *setTar new QBarSet(("tar"));QBarSet *setReality new QBarSet(("reality"));//添加柱状数据*setTar << 1<<…

python图像处理

一、图像透视变化 1.1 实验原理 图像透视变换&#xff08;Perspective Transformation&#xff09;是一种通过数学方法将图像中的点集映射到一个新的点集上的技术。它能够对图像进行几何变换&#xff0c;常用于将不规则形状的区域转换为规则形状&#xff0c;或修正图像中的透视…

Android四大组件——Activity(二)

一、Activity之间传递消息 在&#xff08;一&#xff09;中&#xff0c;我们把数据作为独立的键值对进行传递&#xff0c;那么现在把多条数据打包成一个对象进行传递&#xff1a; 1.假设有一个User类的对象&#xff0c;我们先使用putExtra进行传递 activity_demo06.xml <…

【Lambda】java之lambda表达式stream流式编程操作集合

java之lambda表达式&stream流式编程操作集合 1 stream流概念1.1 中间操作1.1.1 无状态操作1.1.2 有状态操作 1.2 终端操作1.2.1 非短路操作1.2.2 短路操作 2 steam流的生成2.1 方式一&#xff1a;数组转为stream流2.2 方式二&#xff1a;集合转为steam流2.3 方式三&#xf…