作ったものを振り返る 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件のコメント

コメントを残す

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

備忘録
dockerを勉強する

どうもmmnkです. 巷ではよく”docker”って聞くけど何?って感じだっ …

Perl
Perlのリファレンスを理解する

新年明けましておめでとうございます! mmnkです。 最近、Perlを勉強し始めてリファレンス・デリ …

振り返り
2018年を振り返る

どうもmmnkです。2018年ももうすぐ終わってしまいますね(・∀・) 2018年の振り返り記事を最 …