# ticket-purchase
**Repository Path**: ACENG/ticket-purchase
## Basic Information
- **Project Name**: ticket-purchase
- **Description**: 大麦自动抢票,支持人员、城市、日期场次、价格选择
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 105
- **Forks**: 33
- **Created**: 2023-10-12
- **Last Updated**: 2025-09-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 大麦抢票脚本 V1.0
### 特征
- 自动无延时抢票
- 支持人员、城市、日期场次、价格选择
## 功能介绍
通过selenium打开页面进行登录,模拟用户购票流程自动购票
其流程图如下:
## 准备工作
### 1. 配置环境
#### 1.1安装python3环境
**Windows**
1. 访问Python官方网站:https://www.python.org/downloads/windows/
2. 下载最新的Python 3.9+版本的安装程序。
3. 运行安装程序。
4. 在安装程序中,确保勾选 "Add Python X.X to PATH" 选项,这将自动将Python添加到系统环境变量中,方便在命令行中使用Python。
5. 完成安装后,你可以在命令提示符或PowerShell中输入 `python3` 来启动Python解释器。
**macOS**
1. 你可以使用Homebrew来安装Python 3。
- 安装Homebrew(如果未安装):打开终端并运行以下命令:
```shell
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
- 安装Python 3:运行以下命令来安装Python 3:
```shell
brew install python@3
```
#### 1.2 安装所需要的环境
在命令窗口输入如下指令
```shell
pip3 install selenium
```
#### 1.3 下载google chrome浏览器
下载地址: https://www.google.cn/intl/zh-CN/chrome/?brand=YTUH&gclid=Cj0KCQjwj5mpBhDJARIsAOVjBdoV_1sBwdqKGHV3rUU1vJmNKZdy5QNzbRT8F5O0-_jq1WHXurE8a7MaAkWrEALw_wcB&gclsrc=aw.ds
### 2. 修改配置文件
在运行程序之前,需要先修改`config.json`文件。该文件用于指定用户需要抢票的相关信息,包括演唱会的场次、观演的人员、城市、日期、价格等。文件结果如下图所示:
#### 2.1 文件内容说明
- `index_url`为大麦网的地址,**无需修改**
- `login_url`为大麦网的登录地址,**无需修改**
- `target_url`为用户需要抢的演唱会票的目标地址,**待修改**
- `users`为观演人的姓名,**观演人需要用户在手机大麦APP中先填写好,然后再填入该配置文件中**,**待修改**
- `city`为城市,**如果用户需要抢的演唱会票需要选择城市,请把城市填入此处。如无需选择,则不填**
- `date`为场次日期,**待修改,可多选**
- `price`为票档的价格,**待修改,可多选**
- `if_commit_order`为是否要自动提交订单,**改成 true**
- if_listen为是否回流监听,**改成true**
#### 2.2 示例说明
进入大麦网https://www.damai.cn/,选择你需要抢票的演唱会。假设如下图所示:
接下来按照下图的标注对配置文件进行修改:
最终`config.json`的文件内容如下:
```json
{
"index_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.591b23e1JQGWHg&id=740680932762",
"users": [
"名字1",
"名字2"
],
"city": "广州",
"date": "2023-10-28",
"price": "1039",
"if_listen":true,
"if_commit_order": true
}
```
### 3.运行程序
运行程序开始抢票,进入命令窗口,执行如下命令:
```shell
cd damai
python3 damai.py
```
# 大麦app抢票
大麦app抢票脚本需要依赖appium,因此需要现在安装appium server&client环境,步骤如下:
## appium server
### 下载
- 先安装好node环境(具备npm)node版本号18.0.0
- 先下载并安装好android sdk,并配置环境变量(appium server运行需依赖android sdk)
- 下载appium
```shell
npm install -g appium
```
- 查看appium是否安装成功
```shell
appium -v
```
- 下载UiAutomator2驱动
```shell
npm install appium-uiautomator2-driver
```
可能会遇到如下错误:
```tex
➜ xcode git:(master) ✗ npm install appium-uiautomator2-driver
npm ERR! code 1
npm ERR! path /Users/chenweicheng/Documents/xcode/node_modules/appium-uiautomator2-driver/node_modules/appium-chromedriver
npm ERR! command failed
npm ERR! command sh -c node install-npm.js
npm ERR! [11:57:54] Error installing Chromedriver: Request failed with status code 404
npm ERR! [11:57:54] AxiosError: Request failed with status code 404
npm ERR! at settle (/Users/chenweicheng/Documents/xcode/node_modules/appium-uiautomator2-driver/node_modules/axios/lib/core/settle.js:19:12)
npm ERR! at IncomingMessage.handleStreamEnd (/Users/chenweicheng/Documents/xcode/node_modules/appium-uiautomator2-driver/node_modules/axios/lib/adapters/http.js:572:11)
npm ERR! at IncomingMessage.emit (node:events:539:35)
npm ERR! at endReadableNT (node:internal/streams/readable:1344:12)
npm ERR! at processTicksAndRejections (node:internal/process/task_queues:82:21)
npm ERR! [11:57:54] Downloading Chromedriver can be skipped by setting the'APPIUM_SKIP_CHROMEDRIVER_INSTALL' environment variable.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/chenweicheng/.npm/_logs/2023-10-26T03_57_35_950Z-debug-0.log
```
解决办法(添加环境变量,错误原因是没有找到chrome浏览器驱动,忽略即可)
```shell
export APPIUM_SKIP_CHROMEDRIVER_INSTALL=true
```
### 启动
启动appium server并使用uiautomator2驱动
```shell
appium --use-plugins uiautomator2
```
启动成功将出现如下信息:
```
[Appium] Welcome to Appium v2.2.1 (REV 2176894a5be5da17a362bf3f20678641a78f4b69)
[Appium] Non-default server args:
[Appium] {
[Appium] usePlugins: [
[Appium] 'uiautomator2'
[Appium] ]
[Appium] }
[Appium] Attempting to load driver uiautomator2...
[Appium] Requiring driver at /Users/chenweicheng/Documents/xcode/node_modules/appium-uiautomator2-driver
[Appium] Appium REST http interface listener started on http://0.0.0.0:4723
[Appium] You can provide the following URLs in your client code to connect to this server:
[Appium] http://127.0.0.1:4723/ (only accessible from the same host)
[Appium] http://172.31.102.45:4723/
[Appium] http://198.18.0.1:4723/
[Appium] Available drivers:
[Appium] - uiautomator2@2.32.3 (automationName 'UiAutomator2')
[Appium] No plugins have been installed. Use the "appium plugin" command to install the one(s) you want to use.
```
其中`[Appium] http://127.0.0.1:4723/ (only accessible from the same host)
[Appium] http://172.31.102.45:4723/
[Appium] http://198.18.0.1:4723/`为appium server连接地址
## appium client
- 先下载并安装好python3和pip3
- 安装
```shell
pip3 install appium-python-client
```
- 在代码中引入并使用appium
```python
from appium import webdriver
from appium.options.common.base import AppiumOptions
device_app_info = AppiumOptions()
device_app_info.set_capability('platformName', 'Android')
device_app_info.set_capability('platformVersion', '10')
device_app_info.set_capability('deviceName', 'YourDeviceName')
device_app_info.set_capability('appPackage', 'cn.damai')
device_app_info.set_capability('appActivity', '.launcher.splash.SplashMainActivity')
device_app_info.set_capability('unicodeKeyboard', True)
device_app_info.set_capability('resetKeyboard', True)
device_app_info.set_capability('noReset', True)
device_app_info.set_capability('newCommandTimeout', 6000)
device_app_info.set_capability('automationName', 'UiAutomator2')
# 连接appium server,server地址查看appium启动信息
driver = webdriver.Remote('http://127.0.0.1:4723', options=device_app_info)
```
- 启动脚本程序
```shell
cd damai_appium
python3 damai_appium.py
```