프로그램 자동화를 사용하여 새로 고침하고 클릭하여 티켓을 얻으면 이 Python 티켓 잡기 프로그램이 있습니다. 본 프로그램은 브라우저를 수동으로 조작하는 Python 시뮬레이션이므로, 다양한 네트워크나 기타 요인으로 인해 프로그램이 종료될 수 있습니다. 이 글에서는 열차 선택 기능과 좌석 선택 기능 추가의 두 가지 최적화 포인트를 주로 설명합니다.
추천 참고 학습: "Python Tutorial"
자동 티켓 잡기 프로세스
1. 먼저 최적화된 티켓 잡기 프로세스를 정렬합니다.
2. 자동으로 브라우저를 시작하고 프로그램에 설정된 12306 로그인 계정과 비밀번호를 자동으로 입력합니다.
3. 인증코드를 수동으로 입력하세요. 그래픽 인증코드 설정 기능이 너무 복잡하고 인공지능 이미지 인식이 포함되어 있어서 직접 입력하시면 성공률이 높지 않으니 수동으로 입력하도록 하겠습니다. 인증번호를 입력하려면 수동으로 "로그인" 버튼을 클릭하세요.
4. 로그인 성공 후 페이지가 자동으로 인증됩니다. 로그인 성공이 확인되면 자동으로 티켓 확인 페이지로 이동합니다. 자신이 입력한 프로그램 코드에 입력된 출발지와 목적지를 기준으로 티켓을 확인하세요.
5. 입력한 열차 번호에 따라 오른쪽의 "예약" 버튼이 강조 표시되어 있고 클릭 가능한지 확인하세요. 그렇지 않으면 "조회" 버튼을 계속 클릭하고 "버튼"을 클릭하세요. " 버튼.
6. 주문 페이지를 제출하고 승객을 선택한 후, 원하는 좌석 유형(예: 2등석)이 없는 경우 해당 페이지는 기차표 조회 페이지로 돌아가서 다시 조회됩니다. 등.
7. 원하는 티켓을 구매한 후 주문서를 제출하고 이메일을 보내면 완료!
로그인 페이지
이 부분은 브라우저 창을 최대화했습니다. 이전에는 전체 화면으로 설정하지 않았습니다. 사람마다 컴퓨터 표시 크기가 다르기 때문에 일부 요소가 차단되어 클릭할 수 없습니다.
로그인 후 서버 문제일 가능성이 있는 네트워크 문제에 대한 메시지가 나타날 수 있습니다. 이때 왼쪽 상단에 있는 복귀 버튼을 수동으로 클릭하면 일반적으로 여전히 정상으로 돌아갑니다. 한 번 클릭하면 이 메시지가 표시되고 을 두 번 클릭하세요.
조회 페이지
이 페이지의 피크 시간에는 시간 초과 알림이 나타날 수도 있습니다. 가끔 티켓이 너무 많이 방문하여 서버가 비정상적인 것으로 추정됩니다. 빨리 찾았지만, 발생했을 때 특정 패턴을 찾지 못했습니다.
이를 피할 수는 없습니다. 티켓이 있는 페이지가 새로 고쳐질 때까지 프로그램이 자동으로 새로 고쳐집니다. 새로 고침 빈도: 1초/회.
열차 선택 기능은 모두가 더 궁금해하는 기능입니다. 이전에는 순서=0이었고 이번에는 열차의 위치에 따라 해당 번호를 입력할 수 있습니다. 예약할 열차는 5행에 있습니다. 순서 = 5를 입력하면 됩니다. 이러한 매개변수 구성에 대해서는 아래에 나열하겠습니다.
주문 제출 페이지
주문 제출 페이지의 프로그램은 두 가지 작업을 수행합니다. 첫 번째는 입력한 승객 이름을 기준으로 선택하는 것이고, 두 번째는 입력한 좌석을 기준으로 판단하는 것입니다. 원하는 좌석이 있으면 선택해서 주문을 하게 되고, 원하는 좌석이 없을 경우에는 이전 페이지로 돌아가서 티켓 조회, 좌석 확인 등을 반복하게 됩니다. 원하는 예약이 완료되었습니다.
중요한 매개변수 수정 안내
여기서 핵심이 나옵니다. 미리 이해하지 못해도 상관없습니다. 소스코드로 직접 실행해보고 싶다면 꼭 읽어보세요. 여기에서 티켓 확보 소스 코드를 얻은 후 다음 사항에 주의하고 구성해야 합니다.
Python 환경 구성
이 프로그램에 사용한 Python 환경은 실제로 Python 3.6 이상이면 괜찮습니다. 공식 웹사이트에서 Python3 설치 패키지를 다운로드하세요. 설치 시 Python 3.x를 PATH에 추가 옵션을 확인하세요. 이 옵션을 선택하면 설치가 완료된 후 환경 변수가 자동으로 구성된다는 장점이 있습니다. , Python2.x를 설치할 필요 없이 수동으로 구성합니다. 다음 단계는 완전 설치입니다. 설치가 완료된 후 터미널에 Python을 입력하여 버전을 표시하면 설치가 성공한 것입니다. 아직도 어떻게 해야 할지 모르겠다면 온라인에서 여러 튜토리얼을 확인해 보시기 바랍니다.
pip 도구
pip는 일반적인 Python 라이브러리 관리 도구입니다. pip를 사용하여 라이브러리를 설치하고 관리하는 것은 매우 편리합니다. 첫 번째 단계가 완료되면 pip 도구가 함께 제공됩니다. 터미널에 pip list 명령을 입력하면 현재 설치 중인 모든 Python 라이브러리를 볼 수 있습니다.
해당 라이브러리 설치 및 가져오기
이 프로그램에서 사용하는 주요 라이브러리는 주로 브라우저를 구동하여 페이지를 운영하는 데 사용됩니다. pip 명령을 사용하여 직접 설치하세요.
pip install splinter
Splinter 관련 튜토리얼의 중국어 문서 주소는 다음과 같습니다.
https://splinter-docs-zh-cn.readthedocs.io/zh/latest/tutorial.html
설치가 완료된 후 import를 사용하여 IDE에서 이 라이브러리를 가져옵니다. 그래도 사용할 수 없는 경우에는 Pycharm 편집기를 사용하고 설정에서 설치를 소개합니다. 아래 그림에 나와 있습니다.
Python 이메일을 보내려면 Python, smtplib 및 email과 함께 제공되는 두 가지 모듈을 사용해야 합니다. 다운로드하지 않고 직접 가져옵니다.
그래서 꼭 설치해야 할 것은 스플린터 라이브러리뿐입니다. 다른 것들은 직접 가져오고 편집기에서 가져올 수 있습니다.
from splinter.browser import Browser from time import sleep import smtplib from email.mime.text import MIMEText from email.utils import formataddr from email.header import Header
브라우저 드라이버를 다운로드하고 경로를 지정하세요
이 질문이 많이 나오는데 왜 브라우저 드라이버를 다운로드해야 합니까? 스플린터 라이브러리의 기본 원칙은 WebDriver를 통해 해당 작업을 수행하도록 브라우저를 구동하는 것이므로 해당 브라우저를 사용하려면 해당 브라우저 드라이버를 다운로드해야 합니다. 저는 크롬브라우저를 사용하기 때문에 크롬드라이버를 다운로드 했습니다. 여기에 함정이 있습니다. 크롬드라이버와 크롬브라우저 간의 매핑 관계가 있습니다. 매핑 관계는 다음과 같습니다
ChromeDriver v2.43 (2018-10-16)----------Supports Chrome v69-71 ChromeDriver v2.42 (2018-09-13)----------Supports Chrome v68-70 ChromeDriver v2.41 (2018-07-27)----------Supports Chrome v67-69 ChromeDriver v2.40 (2018-06-07)----------Supports Chrome v66-68 ChromeDriver v2.39 (2018-05-30)----------Supports Chrome v66-68 ChromeDriver v2.38 (2018-04-17)----------Supports Chrome v65-67 ChromeDriver v2.37 (2018-03-16)----------Supports Chrome v64-66 ChromeDriver v2.36 (2018-03-02)----------Supports Chrome v63-65 ChromeDriver v2.35 (2018-01-10)----------Supports Chrome v62-64
(Chrome 및 ChromeDriver 매핑 표)
크롬 드라이버를 다운로드하고 압축을 푼 후 해당 경로를 복사하여 소스 코드 33행의 경로를 바꿉니다.
이메일 알림 기능 설정
위의 해당 라이브러리를 설치한 후, 입력해야 하는 정보는 보내는 사람과 받는 사람의 이메일 주소, 보낸 사람의 인증 코드입니다. 따라서 수정해야 할 위치는 sendMail 함수의 51, 52번째 줄의 보낸 사람 이메일 계정과 받는 사람의 이메일 계정, 61번째 줄의 보낸 사람 이메일의 인증 코드입니다.
인증 코드를 얻는 방법에 대한 참고 기사 이메일을 자동으로 보내고 받는 Python 코드 30줄 제가 이메일을 보낼 때 사용하는 이메일 주소는 저의 작은 QQ 이메일 주소이고, 받는 사람 이메일 주소입니다. 내 큰 QQ 이메일 주소입니다. QQ 메일함의 발신자와 수신자가 동일할 수 있습니다. 즉, 자신에게 이메일을 보낼 수 있습니다. 먼저 이메일을 보내는 코드를 실행하여 전송 여부를 확인하는 것이 좋습니다. 일반적으로 인증코드가 잘못되어 작업이 실패하는 경우가 있습니다. 인증코드를 다시 받으시기 바랍니다.
좌석에 해당하는 값
디버깅 결과, 좌석별로 해당 값이 다른 것으로 확인되었습니다.
수차례 디버깅 끝에 각 좌석에 해당하는 값을 테이블로 정리했습니다.
코드 수정 위치는 소스 코드의 112번과 113번 라인입니다. 두 줄 모두 원하는 좌석에 해당하는 값으로 변경해주시면 됩니다.
사용자 이름 12306 및 로그인 비밀번호 12306
메인 함수에서 이 두 항목을 자신의 것으로 변경하면 됩니다. 소스 코드의 114행과 145행을 자신의 것으로 변경하면 됩니다.
Train Selection
Train은 순서 필드로 표시되고,
0은 모든 열차를 나타내고, 1은 첫 번째 행의 열차를 나타내고, 2는 두 번째 행의 열차를 나타냅니다. 일반적으로 출발지와 목적지를 입력하면 모든 열차의 위치가 고정됩니다. 예약하려는 열차의 위치 번호만 입력하면 됩니다. 소스 코드 수정 위치는 주 함수인 146번째 줄에도 있습니다.
승객 이름 형식
승객 = ['XXX', 'XXX']와 같은 승객 이름은 다중 선택이 지원됩니다. 학생 항공권은 승객 = ['XXX( 학생) ', 'XXX'], 그렇지 않으면 오류가 보고됩니다. 소스 코드 수정 위치도 기본 기능인 149행에 있습니다.
탑승 날짜 형식
탑승 날짜 형식은 '2019-01-28'이며 소스 코드 수정 위치도 기본 기능인 151번째 줄에 있습니다.
출발지 및 목적지 쿠키 획득
시간 문제로 인해 최적화되지 않았습니다. 현재 출발지 및 목적지를 수동으로 검색 및 획득하고 자체 12306 열차 티켓 조회 페이지를 열고 출발을 입력할 수 있습니다. 장소와 목적지. 페이지의 디버깅 모드를 열고 단축키 F12를 사용하거나 "검사"를 마우스 오른쪽 버튼으로 클릭하여 디버깅 모드를 열고 네트워크를 선택한 다음 "쿼리" 버튼을 클릭하여 출발지와 목적지에 해당하는 쿠키를 가져옵니다. 소스 코드 수정 위치는 주 함수인 153행과 155행에도 있습니다.
요약하려면 을 수정해야 합니다. chromedriver 경로: 도중 초기화 함수 init에서는 메일 알림 기능 송수신 이메일 계정과 보낸 사람 인증 코드를 sendMail 함수에서 수정하고 해당 좌석 값을 check_ticket 함수에서 수정합니다. 기타 정보에는 12306 사용자 이름, 12306 비밀번호, 열차가 포함됩니다. 선택, 승객 이름, 탑승 날짜, 출발 날짜, 출발 장소 및 목적지 쿠키 값은 모두 소스 코드 하단의 기본 함수에서 수정됩니다.
중요사항: 시간 제한으로 인해 이 프로그램은 구성할 수 없습니다 항목이 꽤 많지만 티켓을 얻으려면 한 가지 방법만 더 시도해 볼 수 있습니다. 이 프로그램은 브라우저의 수동 조작을 시뮬레이션하며 네트워크 문제로 인해 여전히 많은 문제가 있습니다. , 페이지가 오랫동안 유지되고 검색 엔진을 찾을 수 없습니다. 프로그램이 요소 없이 중지되면 다른 예상치 못한 문제도 발생합니다. 프로그램을 다시 시작하고 계속해서 잡을 수 있습니다. 나중에 필요할 경우 천천히 최적화할 것입니다.