大麦抢票-Appium实现抢票软件-APP自动化

环境介绍:Python 3.9.1

自行下载appium和相关依赖

本代码是无聊写的,运行也正常,但是就是抢不到,抢票需要天时,地利,人和,不要用UI最好

我链接的是夜神虚拟模拟器

特此说明:所有的UI自动化抢票以个人见解,95%往上抢不到票

import os
from appium import webdriver
import time

from selenium.webdriver.common.by import By


def get_size(driver):
    x = driver.get_window_size()['width']
    y = driver.get_window_size()['height']
    return x, y

def swipe_down(driver, t):
    """
    滑动时X轴不变,Y轴由小到大
    """
    screensize = get_size(driver)
    x1 = int(screensize[0] * 0.5)  # x坐标
    y1 = int(screensize[1] * 0.25)  # 起始y坐标
    y2 = int(screensize[1] * 0.75)  # 终点y坐标
    driver.swipe(x1, y1, x1, y2, t)



heard = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}

desired_caps = {
    "platformName": "Android",
    "platformVersion": "7.1.3",
    "appPackage": "cn.damai",
    "appActivity": "cn.damai.search.v2.SearchActivity",
    "noReset": True,
    "adbExecTimeout": 200000,
    "headers": heard
}
# name = "作者"
# concert_name = "【北京】DEADLINE 小鬼-作者2023巡回演唱会-北京站"
# session = '2023-06-03 周六 19:00'
# money = '看台1580元'

name = "作者"
concert_name = "武汉站"
session = '2023-06-25 周日 19:00'
money = '看台855'

try:

    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)  ##启动服务器地址,后面跟的是手机信息
    driver.implicitly_wait(8)
    print("开始输入……")

    driver.find_element(By.ID, "cn.damai:id/header_search_v2_input").send_keys(name)
    driver.find_element(By.XPATH, '//android.widget.TextView[@text="{}"]'.format(name)).click()

    time.sleep(0.5)
    #获取演唱会场次
    # try:
    #     print('点击场次')  # 但是时间点长
    #     driver.find_element(By.XPATH, "//*[@text='{}']".format(concert_name)).click()
    # except:
    #     print('点击场次')#需要手动配置
    #     driver.tap([(186, 280), (864, 364)], 300)
        # driver.tap([(186, 280), (864, 364)], 300)
    time.sleep(1)
    #获取当前是否能够购买,如果能够购买直接进入
    sell_status = driver.find_element(By.ID, "cn.damai:id/tv_left_main_text").text
    while True:

        print('现在售票状态处于:{}中....'.format(sell_status))

        if sell_status.strip() == '立即预定' or sell_status.strip() == '立即购买':
            driver.find_element(By.ID, "cn.damai:id/tv_left_main_text").click()
            break

        else:
            # 点击立即购买
            swipe_down(driver, 200)
            # time.sleep(0.1)
        sell_status = driver.find_element(By.ID, "cn.damai:id/tv_left_main_text").text

    time.sleep(0.5)
    #选择场次
    try:

        while True:

            driver.find_element(By.XPATH, "//android.widget.TextView[@text='{}']".format(session)).click()
            time.sleep(0.1)
            driver.find_element(By.XPATH, "//android.widget.TextView[@text='{}']".format(money)).click()
            #点击立即确定
            driver.tap([(354, 1496), (546, 1584)], 300)
            time.sleep(0.1)
            try:
                driver.find_element(By.ID,"cn.damai:id/damai_theme_dialog_confirm_btn")
                driver.find_element(By.ID, "cn.damai:id/damai_theme_dialog_confirm_btn").click()
                time.sleep(0.5)
            except:
                break

        #处理票价
        # num = 1
        # while num > 1:
        #     driver.find_element(By.ID, "cn.damai:id/img_jia").click()
        #     num -= 1
        # driver.tap([(450, 1496), (858, 1584)], 300)
        # driver.find_element(By.XPATH, '//android.widget.TextView[@text="马茂财"]').click()
        # try:
        #     driver.find_element(By.XPATH,'//android.widget.TextView[@text="支付宝"]').click()
        # except:
        #     pass
        #点击确定
        driver.tap([(658, 1500), (858, 1580)], 300)

    except:

        driver.find_element(By.ID, "cn.damai:id/damai_theme_dialog_cancel_btn']").click()
        driver.tap([(354, 1496), (546, 1584)], 300)
        time.sleep(0.5)
        # try:
        #     driver.find_element(By.XPATH, '//android.widget.TextView[@text="预留身份证信息"]')
        # except:


        #处理票价
        # num = 1
        # while num > 1:
        #     driver.find_element(By.ID, "cn.damai:id/img_jia").click()
        #     num -= 1
        driver.tap([(450, 1496), (858, 1584)], 300)
        # driver.find_element(By.XPATH, '//android.widget.TextView[@text="预留身份证信息"]').click()
        # try:
        #     driver.find_element(By.XPATH,'//android.widget.TextView[@text="支付宝"]').click()
        # except:
        #     pass
        #点击确定
        driver.tap([(658, 1500), (858, 1580)], 300)

except Exception as e:

    raise Exception(e)

finally:
    os.system("adb uninstall io.appium.settings")
    # os.system("adb uninstall io.appium.unlock")
    # driver.quit()

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值