Acredito que todo mundo que quer ir ao show de Jay Chou já usou o Damai.com para conseguir ingressos, certo?
Mas
não consigo
Devo dizer que entendi
Então, hoje vou levar você a usar o Python para criar um applet de script que captura tickets automaticamente!
Pontos de conhecimento:
-
Programação Orientada a Objetos
-
navegador de operação de selênio
-
pickle salva e lê cookies para obter acesso sem login
-
hora de fazer a operação de atraso
-
os cria um arquivo e determina se o arquivo existe
Ambiente de desenvolvimento:
-
Edição: anaconda5.2.0 (python3.6.5)
-
Editor: Pycharm
Importe os módulos necessários primeiro
import os
import time
import pickle
from time import sleep
from selenium import webdriver
O primeiro passo é realizar o login sem
Determine o alvo, defina a variável global
damai_url = "就是那个网站"
login_url = "就是那个登陆地址"
target_url = '就是那个目标网站
#这里不是我不放,是平台不给放
#要全部的就来
carregamento inicial
class Concert:
def __init__(self):
self.status = 0
self.login_method = 1
self.driver = webdriver.Chrome(executable_path='chromedriver.exe')
A chamada de login define o cookie
def set_cookie(self):
self.driver.get(damai_url)
print("###请点击登录###")
while self.driver.title.find('dm-全球演出赛事官方购票平台') != -1:
sleep(1)
print('###请扫码登录###')
while self.driver.title != 'dm-全球演出赛事官方购票平台-100%正品、先付先抢、在线选座!':
sleep(1)
print("###扫码成功###")
pickle.dump(self.driver.get_cookies(), open("cookies.pkl", "wb"))
print("###Cookie保存成功###")
self.driver.get(target_url
pegar biscoito
def get_cookie(self):
try:
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###')
except Exception as e:
print(e)
Conecte-se
def login(self):
if self.login_method==0:
self.driver.get(login_url)
print('###开始登录###')
elif self.login_method==1:
if not os.path.exists('cookies.pkl'):
self.set_cookie()
else:
self.driver.get(target_url)
self.get_cookie()
Navegador aberto
def enter_concert(self):
"""打开浏览器"""
print('###打开浏览器,进入dm网###')
self.login()
self.driver.refresh()
self.status = 2
print("###登录成功###")
if self.isElementExist('/html/body/div[2]/div[2]/div/div/div[3]/div[2]'):
self.driver.find_element_by_xpath('/html/body/div[2]/div[2]/div/div/div[3]/div[2]').click()
O segundo passo é pegar os ingressos e fazer um pedido
Determinar se um elemento existe
def isElementExist(self, element):
flag = True
browser = self.driver
try:
browser.find_element_by_xpath(element)
return flag
except:
flag = False
return flag
operação de votação
def choose_ticket(self):
if self.status == 2:
print("="*30)
print("###开始进行日期及票价选择###")
while self.driver.title.find('确认订单') == -1:
try:
buybutton = self.driver.find_element_by_class_name('buybtn').text
if buybutton == "提交缺货登记":
self.status=2
self.driver.get(target_url)
print('###抢票未开始,刷新等待开始###')
continue
elif buybutton == "立即预定":
self.driver.find_element_by_class_name('buybtn').click()
self.status = 3
elif buybutton == "立即购买":
self.driver.find_element_by_class_name('buybtn').click()
self.status = 4
elif buybutton == "选座购买":
self.driver.find_element_by_class_name('buybtn').click()
self.status = 5
except:
print('###未跳转到订单结算界面###')
title = self.driver.title
if title == '选座购买':
self.choice_seats()
elif title == '确认订单':
while True:
print('waiting ......')
if self.isElementExist('//*[@id="container"]/div/div[9]/button'):
self.check_order()
break
escolha assento
def choice_seats(self):
while self.driver.title == '选座购买':
while self.isElementExist('//*[@id="app"]/div[2]/div[2]/div[1]/div[2]/img'):
print('请快速的选择您的座位!!!')
while self.isElementExist('//*[@id="app"]/div[2]/div[2]/div[2]/div'):
self.driver.find_element_by_xpath('//*[@id="app"]/div[2]/div[2]/div[2]/button').click()
Operação do pedido
def check_order(self):
if self.status in [3,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('//div[@class = "w1200"]//div[2]//div//div[9]//button[1]').click()
A coleta de bilhetes está concluída, saia
def finish(self):
self.driver.quit()
Código de teste para o sucesso
if __name__ == '__main__':
try:
con = Concert()
con.enter_concert()
con.choose_ticket()
except Exception as e:
print(e)
con.finish()
Finalmente veja como funciona
Aqui está a demo, esqueci de gravar quando comprei o ingresso hahahahaha
afinal
Estou muito feliz por ter aprendido python, é um pouco útil
Eu vou ao show de agora em diante~
Sobre a reserva técnica do Python
É bom aprender Python, seja um emprego ou um negócio secundário para ganhar dinheiro, mas para aprender Python, você ainda precisa de um plano de estudo. Por fim, todos compartilharão um conjunto completo de materiais de aprendizado de Python para ajudar aqueles que desejam aprender Python!
1. Rotas de aprendizado em todas as direções do Python
A rota de todas as direções no Python é organizar os pontos técnicos comumente usados do Python para formar um resumo dos pontos de conhecimento em vários campos. de forma mais abrangente.
2. Software de aprendizagem
Se um trabalhador quer fazer um bom trabalho, ele deve primeiro afiar suas ferramentas. O software de desenvolvimento comumente usado para aprender Python está aqui, o que economiza muito tempo.
3. Vídeo de aprendizado introdutório
Quando assistimos a vídeos e aprendemos, não podemos apenas mover nossos olhos e cérebro sem usar nossas mãos. Um método de aprendizado mais científico é usá-los após a compreensão. Neste momento, o projeto prático é muito adequado.
4. Casos práticos
A teoria ótica é inútil, você tem que aprender a acompanhar, e você mesmo tem que fazer, para que possa aplicar o que aprendeu na prática.Neste momento, você pode aprender com alguns casos reais de combate.
5. Materiais de entrevista
Aprendemos Python para encontrar um emprego bem remunerado. As perguntas da entrevista a seguir são os materiais de entrevista mais recentes de empresas de Internet de primeira linha, como Ali, Tencent e Byte, e os chefes de Ali deram respostas confiáveis. Depois de terminar este conjunto, o materiais de entrevista acreditam que todos podem encontrar um emprego satisfatório.