马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
1. 脚本介绍
1.1 配景介绍
在这个数字化时代,演唱会、体育赛事和各种运动的门票销售往往在线上进行。由于热门运动的高需求和门票的有限供应,抢票成为了一场剧烈的竞争。很多粉丝和爱好者常常因为手速不够快或网络延迟而错失购票机会。为了提高抢票的成功率,主动化抢票脚本应运而生。
以下这个脚本是一个用 Python 编写的主动化抢票程序,使用Selenium库来模拟用户在网页上的利用。下面是脚本的详细功能和布局介绍:
1.2 脚本目的:
脚本的主要目的是在票务网站上主动购买演唱会或运动门票。它可以在指定的时间主动实行购票流程,从而提高抢票成功的概率。
1.3 主要功能:
- 登录:主动输入用户名和暗码登录票务网站。
- 选择票价和数量:主动选择指定的票价,并增长购买数量。
- 选择购票人:在购票流程中选择预设的购票人信息。
- 提交订单:完成选择后主动提交订单。
1.4 布局和关键函数:
- 导入库:脚本开始处导入了Selenium相干的库,用于欣赏器控制和元素交互。
- 设置参数:界说了抢票的URL、开票时间、用户名等参数。
- 欣赏器初始化:创建了一个Chrome欣赏器的实例。
- 等候时间设置:设置了一个WebDriverWait实例,用于等候网页元素加载。
1.4.1 PC端抢票利用:
- choose函数:用于查找并返回网页元素,假如元素不存在或无法点击,则返回None。
- login函数:用于实行登录利用。
- buy函数:包罗了抢票的主要步调,如选择票价、数量、购票人,末了提交订单。
- test函数:用于测试登录和抢票流程。
移动端抢票利用:
- login_mobile函数:用于移动端的登录利用。
- buy_mobile函数:包罗了移动端抢票的步调。
- test_mobile函数:用于测试移动端的登录和抢票流程。
1.4.2 主函数:
- main函数:是脚本的入口点,默认实行PC端的抢票流程,但可以通过解释切换到移动端或测试模式。
1.5 注意事项:
- 安全性:脚本中包罗了用户名和暗码,应当妥善保管,制止走漏。
- 暗码输入:由于暗码输入框大概不可见,脚本中解释提到必要手动输入暗码。
- 异常处置惩罚:脚本包罗了基本的异常处置惩罚,用于处置惩罚元素找不到或点击失败的情况。
- 定时抢票:脚本通过一个无限循环和条件判定来实现定时抢票功能。
1.6 使用方法:
要使用这个脚本,用户必要安装Selenium库和一个对应的WebDriver(如ChromeDriver),并设置好相干参数,如抢票链接、用户名和暗码。
如未安装Selenium库:
- pip install Selenium -i https://pypi.tuna.tsinghua.edu.cn/simple
复制代码 附注: 主动化抢票脚本大概违背了某些网站的服务条款,使用前应确保了解相干法律和规定,不得违背任何法律或规定,本文仅供学习参考!此外,使用此类脚本大概对其他用户不公平,应当谨慎使用!
2. 代码实现
- """
- 基于python和selenium实现的某麦网自动刷新抢票脚本
- 用户要提前添加好个人信息和收货地址
- """
- from selenium import webdriver
- from selenium.webdriver.support.ui import WebDriverWait
- from selenium.webdriver.common.keys import Keys
- from selenium.webdriver.common.by import By
- from selenium.webdriver.support import expected_conditions as EC
- from selenium.common.exceptions import TimeoutException
- import time
- # 设置抢票链接和开票时间
- # URL = "https://piao.damai.cn/146290.html?spm=a2o6e.search.0.0.7e2b4d157EDtjL"# PC页面
- URL = 'http://m.damai.cn/damai/perform/item.html?projectId=146290'#手机页面
- # HOUR = 19
- MIN = 0
- USERNAME = "13112390306"
- driver = webdriver.Chrome()
- # 设置等待时间
- wait = WebDriverWait(driver, 5)
- driver.get(URL)
- """
- PC端网页抢票操作
- """
- def choose(seletor):
- try:
- # 控件可点击时才选定
- choice = wait.until(EC.element_to_be_clickable((By.XPATH, seletor)))
- return choice
- except TimeoutException as e:
- print("Time out!")
- return None
- except Exception:
- print("Not found!")
- return None
- def login():
- # 点击登录
- login = choose('//*[@id="userLoginInfo"]/span/a[1]')
- login.click()
- username = choose('//*[@id="login_email"]')
- username.send_keys(USERNAME)
- """
- 由于密码框控件被设置为不可见
- 先自行输入密码并记住密码
- 方便刷新
- (也可用cookie实现)
- """
- password = choose('//*[@id="login_pwd_txt"]')
- try:
- password.click()
- password.send_keys("********")
- except Exception:
- print(password)
- print("Password Can't click")
- def buy():
- # 点击价格
- try:
- price = None
- plus = None
- buybtn = None
- submit = None
- booker = None
- select = None
- confirm = None
- driver.get(URL)
- # 选择价格
- while None == price:
- # 这里选的是580票面的,如果选其他票面,修改最后的li[*]即可
- price = choose('//*[@id="priceList"]/div/ul/li[3]')
- price.click()
- # 数量加1
- while None == plus:
- plus = choose('//*[@id="cartList"]/div[1]/ul/li/span[3]/a[2]')
- plus.click()
- # 立即抢购
- while None == buybtn:
- buybtn = choose('//*[@id="btnBuyNow"]')
- driver.execute_script("arguments[0].scrollIntoView();", buybtn)
- buybtn.click()
- # 选择购票人
- while None == booker:
- booker = choose('/html/body/div[3]/div[3]/div[2]/div[2]/div/a')
- driver.execute_script("arguments[0].scrollIntoView();", booker)
- booker.click()
- # 选择、确定
- while None == select:
- select = choose('/html/body/div[3]/div[3]/div[12]/div/div[2]/div/div[2]/div/table/tbody/tr/label/td[1]/input')
- driver.execute_script("arguments[0].scrollIntoView();", select)
- select.click()
- while None == confirm:
- confirm = choose('/html/body/div[3]/div[3]/div[12]/div/div[2]/div/p/div/a')
- driver.execute_script("arguments[0].scrollIntoView();", confirm)
- confirm.click()
- # 提交订单
- while None == submit:
- submit = choose('//*[@id="orderConfirmSubmit"]')
- driver.execute_script("arguments[0].scrollIntoView();", submit)
- submit.click()
- except Exception:
- print("抢票失败,尝试重新抢票")
- buy()
- def test():
- login()
- time.sleep(30)
- print("开始抢票")
- buy()
- print("抢票成功")
- """
- 移动端抢票操作
- """
- def login_mobile():
- """
- 点击购买进入登录界面
- 自行输入帐号密码
- """
- # 立即购买
- buybtn = None
- while None == buybtn:
- buybtn = choose('/html/body/div[1]/div[2]/div/div[1]/div[2]/div')
- driver.execute_script("arguments[0].scrollIntoView();", buybtn)
- buybtn.click()
- # 默认已经选好时间了,再点击立即购买
- buy = None
- while None == buy:
- buy = choose('/html/body/div[1]/div[3]/div[2]/div[1]/div')
- driver.execute_script("arguments[0].scrollIntoView();", buy)
- buy.click()
- def buy_mobile():
- try:
- # 立即购买
- buybtn = None
- while None == buybtn:
- buybtn = choose('/html/body/div[1]/div[2]/div/div[1]/div[2]/div')
- driver.execute_script("arguments[0].scrollIntoView();", buybtn)
- buybtn.click()
- # 默认已经选好时间了,再点击立即购买
- buy = None
- while None == buy:
- buy = choose('/html/body/div[1]/div[3]/div[2]/div[1]/div')
- driver.execute_script("arguments[0].scrollIntoView();", buy)
- buy.click()
- # 580票面
- price = None
- while None == price:
- price = choose('//html/body/div[1]/div/div[2]/ul/li[3]')
- driver.execute_script("arguments[0].scrollIntoView();", price)
- price.click()
- # 数量+1
- count = None
- while None == count:
- count = choose('/html/body/div[1]/div/div[3]/ul/li/div/div[3]')
- driver.execute_script("arguments[0].scrollIntoView();", count)
- count.click()
- # 选好了
- select = None
- while None == select:
- select = choose('/html/body/div[1]/div/div[4]/div[3]')
- driver.execute_script("arguments[0].scrollIntoView();", select)
- select.click()
- # 购票人
- booker = None
- while None == booker:
- booker = choose('/html/body/div[1]/div[1]/div[2]/div[1]/div[2]/div/ul/li/div')
- driver.execute_script("arguments[0].scrollIntoView();", booker)
- booker.click()
- # 去付款
- pay = None
- while None == pay:
- pay = choose('/html/body/div[1]/div[2]/div[2]/div[2]/div')
- driver.execute_script("arguments[0].scrollIntoView();", pay)
- pay.click()
- except Exception:
- print("抢票失败,尝试重新抢票")
- buy_mobile()
- def test_mobile():
- login_mobile()
- time.sleep(30)
- print("开始抢票")
- buy_mobile()
- print("抢票成功")
- def main():
- # 默认 PC 网页,手机网页对应修改即可
- login()
- # 30秒等待用户输入密码后再开始刷
- time.sleep(30)
- while 1:
- if MIN == time.localtime().tm_min:
- print("开始抢票")
- buy()
- print("抢票成功")
- if __name__ == '__main__':
- # test()
- test_mobile()
- # main()
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |