Implementando monitoramento e compra de bilhetes de trem com Python (edição de 2024)

Automatização de compra de bilhetes de trem via Python com análise de código e download

Resumo: Com a proximidade do período de viagens da Festa da Primavera, implementamos um fluxo automatizado para monitorar e comprar bilhetes no site 12306. Utilizamos o módulo tkinter para criar uma janela de notificação após a compra bem-sucedida, informando ao usuário sobre o sucesso da operação. A versão sem interface gráfica permite que o script execute em segundo plano, exibindo alertas apenas quando necessário. Testado com sucesso e efetuada compra de bilhete

Aviso: Este artigo tem fins exclusivamente técnicos e não pode ser utilizado para fins comerciais. Todos os conteúdos são originais. Para reprodução, inclua o link deste artigo

Pré-requisitos

Versão:
Python: 3.9
Chromedriver: procure no site oficial a versão compatível com seu navegador
Endereço do site oficial do Chromedriver: http://chromedriver.storage.googleapis.com/index.html (ou pesquise no Google)

Módulos utilizados:
1. selenium: utilizado para automatizar operações no navegador, simulando login, consulta de bilhetes e processo de reserva.

2. configparser: usado para ler e gravar arquivos de configuração, armazenando informações como origem, destino e data da viagem.

3. schedule: responsável por executar tarefas programadas, realizando consultas e reservas em intervalos definidos.

4. time: fornece funcionalidades relacionadas ao tempo, como pausas entre operações.

5. tkinter: utilizado para criar uma interface gráfica simples, exibindo uma janela de notificação após a compra bem-sucedida.


Parte 1 - Fluxo principal


1. Simulação de login: Utilizamos o Selenium para automatizar o processo de login no site 12306, incluindo a digitação de nome de usuário, senha, dígitos finais do RG e código de verificação do celular.

2. Leitura de configurações: Obtemos informações de viagem (origem, destino e data) através de um arquivo de configuração ou entrada manual.

3. Consulta de bilhetes: Simulamos a consulta de bilhetes no site 12306, preenchendo os campos de origem, destino e data, e executando a busca.

4. Simulação de reserva: Se encontrarmos bilhetes disponíveis, o script simula o clique no botão de reserva, acessando a página de finalização da compra.

5. Seleção de passageiros: Na página de finalização, o script marca automaticamente os dados dos passageiros para envio do pedido.

6. Confirmação do pedido: Simulamos o clique no botão de confirmação, finalizando o processo de compra.

7. Notificação de sucesso: Após a confirmação bem-sucedida, usamos o módulo tkinter para exibir uma janela de notificação com informações sobre a compra.

8. Informações de pagamento: A janela exibe dados relevantes para o pagamento, orientando o usuário a concluir a transação.


Parte 2 - Análise do código de login

  • Abertura da página de login: driver.get("https://kyfw.12306.cn/otn/resources/login.html") abre a página de login do 12306.
  • Localização dos campos de usuário e senha: Utilizamos driver.find_element para localizar os campos de login pelo ID.
  • Digitação de usuário e senha: Enviamos os dados digitados pelo usuário via send_keys.
  • Clique no botão de login: driver.find_element(By.ID, "J-login").click() simula o clique no botão de login.
  • Autenticação: Digitação dos dígitos finais do RG e código de verificação via SMS.
  • Aguardar conclusão do login: Usamos time.sleep(10) para garantir que a página carregue completamente após o login.
  • Navegação para página de consulta: Localizamos a opção de bilhetes de ida via XPath e acessamos a página de consulta.

Parte 2 - Análise do código de consulta

Inserção das informações: Obtemos dados de origem, destino e data do arquivo de configuração, inserindo-os nos campos correspondentes via send_keys. Seleção de critérios: Utilizamos a classe Select para lidar com menus suspensos, escolhendo o horário de saída. Marcação de bilhetes disponíveis: Verificamos se a caixa de seleção já está marcada, e se não estiver, clicamos para marcar. Clique no botão de consulta: Simulamos o clique no botão de busca.

Aguardar resultados da consulta: Utilizamos WebDriverWait para aguardar a aparição dos elementos de resultados, com tempo máximo de 10 segundos.

Processamento dos resultados: Se houver resultados, simulamos o clique no elemento de resultado e chamamos a função place_order para finalizar a compra. Verificação do status de login: Verificamos se o campo J-userName existe, indicando que o login expirou, encerrando o programa. Tratamento de exceções: Capturamos exceções para lidar com casos temporários de indisponibilidade de bilhetes.

Parte 3 - Aálise do código de finalização da compra

1. Marcação dos passageiros

Localizamos o elemento da caixa de seleção via XPath. Verificamos se a caixa já está marcada, e se não estiver, clicamos para selecionar os passageiros.

2. Verificação de navegação bem-sucedida

Obtemos a URL atual após clicar no botão de finalização do pedido. Verificamos se a URL mudou, indicando que a navegação foi bem-sucedida. Se a compra for concluída, realizamos ações cnoforme o conteúdo da página, como exibir a notificação de suceso.

Parte 4 - Tarefas programadas

As tarefas programadas atuam como um assistente automático que verifica regularmente as informações de bilhetes, facilitando a compra e a finalização. Isso evita a necessidade de intervenção manual, garantindo respostas rápidas durante os períodos de pico. A inclusão de tarefas programadas no código permite maior eficiência no processo.

Sumário do processo de aprendizado

  1. Testes mostraram que o login no 12306 expira após aproximadamente 1 hora, exigindo reautenticação.
  2. O programa foi desenvolvido com foco em cenários individuais, não abordando threads ou programação de rede.
  3. A funcionalidade de notificação via serviço de SMS da Alibaba Cloud não foi implementada devido à rigorosa verificação de APIs.
  4. Alguns elementos podem ter caminhos XPath diferentes, recomenda-se usar as ferramentas de desenvolvedor do navegador (F12) para obter os caminhos corretos.
  5. A estrutura do projeto inclui os arquivos main_auto.py e main_test.py, permitindo testes em um arquivo antes de implementar no principal.

Link do código-fonte

Comunidade com código-fonte (inclui códigos de todas as edições): https://t.zsxq.com/1645BOuxjCódigos com descontos: https://t.zsxq.com/16ksfdpbw

Tags: Selenium Python 12306 Automatização Web Tkinter

Publicado em 9-27 14:37