プログラム自動化を使用して更新し、クリックしてチケットを取得すると、この Python チケット取得プログラムが完成します。このプログラムはブラウザを手動で操作するPythonのシミュレーションですので、ネットワークなどの様々な要因によりプログラムが終了する可能性があります。この記事では、列車選択機能と座席選択機能の追加という2つの最適化ポイントを中心に説明します。
Python チュートリアル 」
#自動チケット取得プロセス1. まず、最適化されたチケット取得プロセスを整理します。
2. ブラウザが自動的に起動し、プログラムに設定されている 12306 ログイン アカウントとパスワードが自動的に入力されます。
3. 認証コードを手動で入力します。グラフィック認証コードの設定機能は人工知能による画像認識を伴うため、手動で入力すると成功率が高くなります。確認コードを手動で入力し、「ログイン」ボタンをクリックします。
4. ログインに成功すると、ページが自動的に認証され、チケット確認ページにジャンプします。ご自身のプログラムコードに入力された出発地と目的地をもとに航空券を確認します。
5. 入力した列車番号に基づいて、右側の「予約」ボタンが強調表示されてクリックできるかどうかを確認します。クリックできない場合は、「照会」ボタンをクリックし続けてページを更新します。チケットがあるまで「ボタン」ボタンをクリックしてください。
6. 注文ページを送信し、乗客を選択し、2 等席など、希望する座席タイプがない場合は、列車チケットの問い合わせページに戻ります。再度クエリを実行するなど。
7. 必要なチケットを取得したら、注文を送信し、メールを送信して完了です。
ログイン ページこの部分ではブラウザ ウィンドウを最大化しました。これまでは全画面表示に設定していませんでした。そのため、一部の要素は異なります。クリックできなくなる可能性があります。
ログイン後、ネットワークの問題の可能性についてのプロンプトが表示される場合があります。この時点では、左上隅にある戻るボタンを手動でクリックすると、通常は正常に戻ります。 1 回クリックしてもプロンプトが表示される場合は、2 回クリックします。
クエリ ページ電車のチケット ページをクエリすると、このページのピーク時間帯にもタイムアウト プロンプトが表示されます。アクセスが多すぎることによるサーバー異常により、チケットがすぐに見つかることもありますが、特定のパターンは見つかりません。
これを避けることはできません。チケットのあるページが更新されるまで、プログラムは自動的に更新します: 1 秒/回。
列車選択機能は、以前はすべての列車にデフォルトで order = 0 が設定されていましたが、今回は列車の位置に応じて対応する番号を入力できます。予約する列車は 5 番線にあります。order = 5 を設定するだけです。これらのパラメータ設定については、以下に列挙します。
注文ページの送信注文ページの送信 プログラムは 2 つのことを行います。1 つ目は、入力した乗客名に基づいて選択すること、2 つ目は、入力した座席に基づいて判断します。希望する座席のチケットがある場合は、選択して注文を送信します。希望する座席のチケットがない場合は、前のページに戻り、チケットの照会を繰り返します。希望するチケットを予約するまで、座席などを確認してください。
重要なパラメータの変更手順ここが重要なポイントです。理解していなくても大丈夫です。ソースコードから直接実行したい場合は、必ずよく読んでください。チケット取得のソースコードを取得した後、次の点に注意して設定する必要があります。
Python 環境構成このプログラムで使用した Python 環境は Python 3.6 です。実際には、3.5 以上であれば問題ありません。 Python3 のインストール パッケージを公式 Web サイトからダウンロードします。インストールするときは、必ず [Python 3.x を PATH に追加] オプションをオンにしてください。このオプションをオンにする利点は、インストールの完了後に環境変数が自動的に設定されることです。 Python2.x を手動でインストールする必要はありません。次のステップは確実なインストールです。インストールが完了したら、ターミナルに Python を入力してバージョンを表示すると、インストールは成功です。まだやり方がわからない場合は、オンラインチュートリアルがたくさんあるので調べてみることをお勧めします。
pip ツールpip は、一般的な Python ライブラリ管理ツールです。ライブラリのインストールと管理に pip を使用すると非常に便利です。 。最初のステップが完了すると、pip ツールが付属します。ターミナルに pip list コマンドを入力すると、現在インストールしているすべての Python ライブラリを表示できます。
対応するライブラリをインストールしてインポートします。
このプログラムで使用される主なライブラリは、主にブラウザでページを操作するために使用されます。直接インストールしてください。
pip install splinter
Splinter 関連のチュートリアルの中国語ドキュメントのアドレスは次のとおりです。興味のある方はご覧ください。
https://splinter-docs-zh-cn.readthedocs.io/zh/latest/tutorial.html
インストールが完了したら、インポートを使用してこのライブラリを IDE にインポートします。それでも使用できない場合は、忘れずにインストールしてエディターに導入します。私は Pycharm エディターを使用してインストールを導入します。下の図に示すように設定します。
#Python 電子メールを送信するには、Python に付属する 2 つのモジュール、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 を通じてブラウザーに対応する操作を実行させることであるため、対応するブラウザーを使用するには、対応するブラウザー ドライバーをダウンロードする必要があります。私は chrome ブラウザを使用しているので、chromedriver をダウンロードしました。ここで落とし穴があります。chromedriver と chrome ブラウザの間にはマッピング関係があります。対応するバージョンをダウンロードする必要があります。マッピング関係は次のとおりです。
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 のマッピング テーブル)
chromedriver をダウンロードして解凍した後、そのパスをコピーし、ソース コードの 33 行目のパスを置き換えます。
#メール通知機能の設定
上記の対応するライブラリをインストールした後、入力する必要がある情報は次のとおりです。送信者と受信者 送信者の電子メール アドレスと送信者の認証コード。したがって、変更が必要な箇所は、sendMail関数の51行目と52行目の送信者メールアカウントと受信者メールアカウント、および61行目の送信者メールの認証コードです。
# 認証コード取得方法参考記事 メールを自動送受信するための Python コード 30 行 私が使用しているメールアドレス。電子メールを送信するのは私の小さな QQ メールボックスであり、受信者のメールボックスは私の大きな QQ メールボックスです。 QQ メールボックスの送信者と受信者は同じにすることができます。つまり、自分自身にメールを送信するためのコードを最初に実行して、送信が成功したかどうかを確認することをお勧めします。 . 一般に、操作の失敗は、認証コードが間違っていることが原因で発生します。認証コードを再度取得してください。
デバッグ後、座席ごとに対応する値が異なることがわかりました。
何度もデバッグを行った後、さまざまな座席に対応する値を表に整理しました。
コードの変更場所は、ソース コードの 112 行目と 113 行目です。希望する座席に合わせて両方の行を変更する必要があります。値は問題ありません。
main 関数内のこれら 2 つの項目を自分のものに変更するだけです。ソース コードの 114 行目と 145 行目を自分のものに変更するだけです。自分の。
列車の選択列車は順序フィールドで表されます。
0 はすべての列車を表し、1 は最初の行の列車を表します。 2列目の列車の数など。通常、出発地と目的地を入力すると、すべての列車の位置が確定します。予約したい列車の位置番号を入力するだけです。ソース コードの変更場所も main 関数の 146 行目です。乗客名 (乗客 = ['XXX', 'XXX'] など)。学生チケットはマークする必要があることに注意してください。注: 明確なメソッドは次のとおりです:乗客 = ['XXX(student)', 'XXX']、そうでない場合は、ソース コードの変更場所も main 関数の 149 行目にあります。
乗車日の形式乗車日、形式は「2019-01-28」です。ソース コードの変更場所も main 関数の 151 行目です。 。
出発地と目的地の Cookie の取得時間の問題により、現時点では出発地と目的地を手動で検索して取得し、開くことしかできません。 our own 12306 鉄道チケット照会ページに移動し、出発地と目的地を入力します。ページのデバッグ モードをオンにし、ショートカット キー F12 を使用するか、「検査」を右クリックしてデバッグ モードをオンにし、ネットワークを選択して「クエリ」ボタンをクリックして、送信元と送信先に対応する Cookie を取得します。ソース コードの変更場所も main 関数の 153 行目と 155 行目です。
要約すると、上記の chromedriver パス、初期化関数 init、電子メール通知を変更する必要があります。メールボックスの送受信関数 アカウント番号と送信者認証コードは sendMail 関数で変更され、対応する座席値は check_ticket 関数で変更されます。 その他の情報には、12306 ユーザー名、12306 パスワード、列車選択、乗客名、乗車日が含まれます。 、出発日、出発地、目的地のクッキー値はソースコード下部のmain関数で変更されます。
重要な注意事項: 時間が限られているため、このプログラムには多くの設定項目がありますが、チケットを取得するためにこのプログラムはブラウザの手動操作をシミュレートします。たとえば、ネットワークの関係により、ページが長時間表示されず、要素が見つからないなど、多くの問題が発生します。プログラムが停止すると、他のさまざまな問題も発生します。プログラムが停止した場合は、必要に応じて後でゆっくりと最適化を続けることしかできません。