作ったものを振り返る Part1.2

Python
1

初めに

教習所予約確認botは全てPythonで実装しました。

概略

ここではログイン処理とソースの取得について振り返ります。

ログイン処理

ログインの方法はCookieを使う方法 や 仮想ブラウザを使う方法 がありますが、今回は動的なページに強い・実装が楽(ツカッテミタカッタ)というので仮想ブラウザを使う方法を選択しました。

というわけで以下ではSeleniumのchrome-webdriverを使用した説明を行います。

流れ

  1. 図1. のように使用しているブラウザの開発者ツールを表示させ、対象となるログインフィールドのxpathを取得
  2. そのフィールドにusernameとpasswordをsend_keys()を用いて入力
  3. ログインボタンのxpathを取得してclick()

たったこれだけでログイン処理ができてしまいます!

このログイン処理をすると仮想ブラウザ内でログイン処理をした後のページ(図2)に遷移します。

login
図1. ログイン画面
select_car_type
図2. 車種の選択

車種の選択

図2のページでは車種を選択します。

流れ

  1. selectタグ形式であるので、select形式として取得
  2. 車種が番号で識別されているので、番号を指定して車種を指定
  3. OKボタンを取得してclick()

これで図3のように車種を指定したときの予約ページに遷移することができました!

このページについてスクレイピングをしていきたいのでこのページのソースを返してブラウザの処理は終了です。

ブラウザをclose()しないとメモリに残るので注意しましょう。

reservation_list
図3. 予約リスト

GPUを使いたくない

Seleniumのchrome-webdriverは標準ではGPUを使った実行がされます。

もともとの構想としてHerokuでの定期実行を行いたかったのでGPUを使いたくなかったわけです。

そんな時に見つけたのがこの記事です。

chrome-driverのoptionでheadless指定をしてあげるだけです!簡単ですね!

注意

Herokuで運用し始めようとした時にこのwebdriverの部分でエラーが出ました。

解決方法としてはこの記事にある通り

  • https://github.com/heroku/heroku-buildpack-google-chrome.git
  • https://github.com/heroku/heroku-buildpack-chromedriver.git

の2つをbuildpackに追加するのと

options.binary_location = '/app/.apt/usr/bin/google-chrome'
self.browser = webdriver.Chrome(chrome_options=options)

のようにバイナリの場所を指定してあげる必要があります。

1件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Python
作ったものを振り返る Part1.5

このエントリーでPart1ラストとなります! 概略 今回はHerokuでの運用についてご紹介します! …

React
読んでる本の紹介

どうもmmnkです。 今回は2週間ぐらい前に買って読み進めてた本の紹介をしたいと思います。 (Rea …

Python
作ったものを振り返る Part1.4

 概略 今回はデータベースの操作について振り返ります。 目標 ここでの目標は前回アクセスしたときの状 …