diff --git a/pachong.py b/pachong.py new file mode 100644 index 0000000..16b54cc --- /dev/null +++ b/pachong.py @@ -0,0 +1,127 @@ +import os +import time +import pickle # 实现读取cookie + +from selenium import webdriver + +# 大麦网首页 +damai_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?id=779820312992' + + +class Concert: + # 初始化加载 + def __init__(self): + self.status = 0 # 状态,表示当前操作执行到那一步了 + self.login_method = 1 # {0: 模拟登录, 1:cookie登录} + self.driver = webdriver.Edge() # 初始化浏览器 + + # cookies: 登录网站的时候出现的,记录用户信息 + def set_cookies(self): + self.driver.get(login_url) # 帮助我们打开一个网页 + print("###请扫码登录###") + time.sleep(20) + print("###登录成功###") + # cookie.pkl + pickle.dump(self.driver.get_cookies(), open('cookies.pkl', 'wb')) + print("###cookie保存成功###") + # 抢票 + self.driver.get(target_url) + + # 如果当前我已经有了cookie.pkl + def get_cookies(self): + cookies = pickle.load(open('cookies.pkl', 'rb')) + for cookie in cookies: + cookie_dict = { + 'domain': '.damai.cn', + 'name': cookie.get('name'), + 'value': cookie.get('value') + } + self.driver.add_cookie(cookie_dict) + + print("###载入cookie成功###") + + # 登录 + def login(self): + # 如果为0 模拟登陆一下 + if self.login_method == 0: + self.driver.get(login_url) + + elif self.login_method == 1: + # 如果当前目录下 没有这个cookie.pkl这个文件 + if not os.path.exists('cookies.pkl'): + # 登录一下 登录信息记录 + self.set_cookies() + + else: + self.driver.get(target_url) + # 登录一下 通过selenium传入一些用户信息 + self.get_cookies() + + # 打开浏览器 + def enter_concert(self): + print("###打开浏览器,进入大麦网###") + # 调用login + self.login() + self.driver.refresh() + self.status = 2 + print("###登录成功###") + + # 二、抢票且下单 + # 选票操作 + def choose_ticket(self): + if self.status == 2: + print('=' * 30) + print('###请开始日期选择以及票价选择###') + print(self.driver.title.find("确认订单") == 1) + while self.driver.title.find("确认订单") == -1: + + # 下单按钮 + buybutton = self.driver.find_element_by_class_name("buybtn").text + + if buybutton == '提交缺货登记': + self.driver.refresh() + elif buybutton == '立即购买': + self.driver.find_element_by_class_name("buybtn").click() + self.status = 5 + elif buybutton == '选座购买': + self.driver.find_element_by_class_name("buybtn").click() + self.status = 4 + else: + self.status = 100 + title = self.driver.title + if title == '选座购买': + + # 执行选座操作 + self.status = 10 + elif title == '确认订单': + + # 实现下单的逻辑 + while True: + print('###正在加载###') + self.check_order() + break + + # 下单操作 + def check_order(self): + if self.status in [4, 5]: + print("###开始确认订单###") + try: + self.driver.find_element_by_xpath('//*[@id="container"]/div/div[2]/div[2]/div[1]/div/label').click() + except Exception as e: + print("###购票人信息选中失败,自行查看元素位置###") + print(e) + time.sleep(0.5) + self.driver.find_element_by_xpath('//*[@id="container"]/div/div[9]/button').click() + + +if '__main__' == __name__: + con = Concert() + con.enter_concert() + time.sleep(1) + con.choose_ticket()