上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

大麦抢票

[复制链接]

该用户从未签到

1

主题

0

回帖

4

积分

助理工程师

积分
4
发表于 昨天 22:01 | 显示全部楼层 | 阅读模式
悬赏2油猫币未解决

某麦网自动刷新抢票脚本
原创 今晚务必早点睡 今晚务必早点睡 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[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()

"""
基于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[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
    # 580 票面的
    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 =

  • TA的每日心情
    开心
    2024-11-21 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    309

    主题

    4362

    回帖

    4212

    积分

    管理员

    积分
    4212

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 昨天 22:26 | 显示全部楼层
    ?这是发错版块了?
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表