目次
1. 説明
1.1. 背景
今年も毎年恒例の春節の旅行時期がやってきましたが、いつも切符が手に入らずイライラしています。今回は、12306 チケット購入プラットフォームのログイン問題を解決することで、12306 自動チケット購入プロセスを段階的に完了させていきます。
1.2. 説明
オペレーティングシステム: win10
エディタ:pycharmedu
言語とバージョン: Python 3.10
使用ライブラリ: Selenium
実装アイデア: セレンを使用して人間の行動をシミュレートし、ログインを自動化する
画像認証コードを認識:スーパーイーグル
ブラウザのダウンロードとドライバのインストール: Firefox のダウンロードとドライバのインストール
ブラウザ クラッシュの説明: ダウンロードしたブラウザとブラウザ ドライバのバージョンが一致していないことが原因である可能性が高く、問題を解決するには、検索エンジンを使用して上司が共有しているコンテンツを見つけることをお勧めします。
次の URL は本物ではありません。テスト用に使用し、注意して識別し、自分で変更してください。
2. 手順
2.1. 12306 Web サイトを開く
driver = Firefox()
driver.get('请求的url')
2.2. アカウント番号とパスワードを入力します
driver.find_element(By.XPATH, '//*[@id="J-userName"]').send_keys('123456')
driver.find_element(By.XPATH, '//*[@id="J-password"]').send_keys('123456')
2.3. クリックして今すぐログインしてください
driver.find_element(By.XPATH, '//*[@id="J-login"]').click()
2.4. 認証用のスライダーをドラッグします。
質問:
12306 は、アンチクロールを実行し、Selenium によって起動されたブラウザ Web ドライバーが True であるかどうかを検出し、True であれば、どのようにドラッグしても再表示されます。
解決:
多くの情報を確認した結果(インターネット上では主に Chrome ブラウザが使用されており、Firefox はほとんど使用されていないため、見つけるのが困難です)、解決策を見つけました。URL をリクエストした後、フロントエンドのリバウンドを実行し、Web ドライバーを設定しますfalseにします。
script = 'Object.defineProperty(navigator,"webdriver",{get:()=>false,});'
driver.execute_script(script)
push_btu = driver.find_element(By.XPATH, '/html/body/div[1]/div[4]/div[2]/div[2]/div/div/div[2]/div/div[1]/div[2]/span')
ActionChains(driver).drag_and_drop_by_offset(push_btu, 500, 0).perform()
コードを実行してコンソールに表示すると、結果は次のようになります。
3. 結果
3.1. 運用結果
上の画像が表示され、ログインに成功したことがわかります。チケットの確認と購入の準備をすることができます。
4. このセクション
2023年、12306さんがログインした際には、画像認証コードが不要になり、用意されていた本人確認コードは使用されませんでしたが、さらに便利になりました。
この自動ログインに必要な知識は次のとおりです。
1) イベントチェーン。
2) クリック、入力、スライダーのドラッグなどの基本的な Selenium コントロールの使用。
上記の内容はチケット購入の前半部分です。時間の都合上、チケットの自動購入が完全に実現するまでは一連の内容となります。完全なソースコードはチケットの自動購入が完全に実現した時点で公開されます。批判と修正は以下のとおりです。いらっしゃいませ。