gezi 发表于 2025-3-12 22:01:56

大麦抢票

某麦网自动刷新抢票脚本
原创 今晚务必早点睡 今晚务必早点睡 2024-03-12 08:03 上海 101人听过


"""
基于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')
    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')
      price.click()
      # 数量加1
      while None == plus:
            plus = choose('//*[@id="cartList"]/div/ul/li/span/a')
      plus.click()
      # 立即抢购
      while None == buybtn:
            buybtn = choose('//*[@id="btnBuyNow"]')
      driver.execute_script("arguments.scrollIntoView();", buybtn)
      buybtn.click()
      # 选择购票人
      while None == booker:
            booker = choose('/html/body/div/div/div/div/div/a')
      driver.execute_script("arguments.scrollIntoView();", booker)
      booker.click()
      # 选择、确定
      while None == select:
            select = choose('/html/body/div/div/div/div/div/div/div/div/table/tbody/tr/label/td/input')
      driver.execute_script("arguments.scrollIntoView();", select)
      select.click()
      while None == confirm:
            confirm = choose('/html/body/div/div/div/div/div/div/p/div/a')
      driver.execute_script("arguments.scrollIntoView();", confirm)
      confirm.click()
      # 提交订单
      while None == submit:
            submit = choose('//*[@id="orderConfirmSubmit"]')
      driver.execute_script("arguments.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/div/div/div/div/div')
    driver.execute_script("arguments.scrollIntoView();", buybtn)
    buybtn.click()
    # 默认已经选好时间了,再点击立即购买
    buy = None
    while None == buy:
      buy = choose('/html/body/div/div/div/div/div')
    driver.execute_script("arguments.scrollIntoView();", buy)
    buy.click()

def buy_mobile():
    try:
      # 立即购买
      buybtn = None
      while None == buybtn:
            buybtn = choose('/html/body/div/div/div/div/div/div')
      driver.execute_script("arguments.scrollIntoView();", buybtn)
      buybtn.click()
      # 默认已经选好时间了,再点击立即购买
      buy = None
      while None == buy:
            buy = choose('/html/body/div/div/div/div/div')
      driver.execute_script("arguments.scrollIntoView();", buy)
      buy.click()
      # 580票面
      price = None
      while None == price:
            price = choose('//html/body/div/div/div/ul/li')
      driver.execute_script("arguments.scrollIntoView();", price)
      price.click()
      # 数量+1
      count = None
      while None == count:
            count = choose('/html/body/div/div/div/ul/li/div/div')
      driver.execute_script("arguments.scrollIntoView();", count)
      count.click()
      # 选好了
      select = None
      while None == select:
            select = choose('/html/body/div/div/div/div')
      driver.execute_script("arguments.scrollIntoView();", select)
      select.click()
      # 购票人
      booker = None
      while None == booker:
            booker = choose('/html/body/div/div/div/div/div/div/ul/li/div')
      driver.execute_script("arguments.scrollIntoView();", booker)
      booker.click()
      # 去付款
      pay = None
      while None == pay:
            pay = choose('/html/body/div/div/div/div/div')
      driver.execute_script("arguments.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()






















"""
基于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

# 设置抢票链接和开票时间
# PC页面
URL = "https://piao.damai.cn/146290.html?spm=a2o6e.search.0.0.7e2b4d157EDtjL"
# HOUR = 19
MIN = 0
USERNAME = "13112390306"

# 初始化浏览器驱动
driver = webdriver.Chrome()
# 设置等待时间
wait = WebDriverWait(driver, 5)
driver.get(URL)


# 选择元素
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')
    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
      # 580 票面的
      price = choose('//*[@id="priceList"]/div/ul/li')
      price.click()
      # 数量加 1
      while None == plus:
            plus = choose('//*[@id="cartList"]/div/ul/li/span/a')
      plus.click()
      # 立即抢购
      while None == buybtn:
            buybtn = choose('//*[@id="btnBuyNow"]')
      driver.execute_script("arguments.scrollIntoView();", buybtn)
      buybtn.click()
      # 选择购票人
      while None == booker:
            booker = choose('/html/body/div/div/div/div/div/a')
      driver.execute_script("arguments.scrollIntoView();", booker)
      booker.click()
      # 选择、确定
      while None == select:
            select = choose('/html/body/div/div/div/div/div/div/div/div/table/tbody/tr/label/td/input')
      driver.execute_script("arguments.scrollIntoView();", select)
      select.click()
      while None == confirm:
            confirm =

王一之 发表于 2025-3-12 22:26:24

?这是发错版块了?

半日lll 发表于 2025-3-13 13:42:49

这怕不是用Ai生成的

gezi 发表于 2025-3-13 21:15:02

半日lll 发表于 2025-3-13 13:42
这怕不是用Ai生成的

这是两版然后一起发出来了 上面那个是别人写的 下面那一套是ai修改过了的

gezi 发表于 2025-3-13 21:15:51

王一之 发表于 2025-3-12 22:26
?这是发错版块了?

我想问问这玩意能不能运行成功

neos 发表于 2025-5-8 22:29:27

大麦不是把网页抢的都屏蔽了吗?
页: [1]
查看完整版本: 大麦抢票