楽天証券のメールによる画像追加認証をPythonのSeleniumで自動ログインする

eyecatching_raksec_additional_authentication_python_selenium プログラミング
この記事は約2分で読めます。
フィッシングサイトによるアカウントハッキング被害により各証券会社のログインに多要素認証が導入された。それによりSeleniumによる自動操作ができなくなっていた。PythonのSeleniumで自動ログインできるようになったため方法を紹介する。

方針

楽天証券にログインすると追加認証としてメールに認証コードが送られ、メール本文にある認証コードをWebページ上で正しく選択するとログインできる仕組みに変更された。認証コードは画像でメール本文に表示された画像2つをWebページで正しい順番で選択することでログインできる。

当初はメール本文にある画像を取得してWebページに表示されている画像と比較、ほぼ一致したらそれを選択する、という方法で実装しようとしていた。実装を進めているとメール本文にも画像名称がテキストで書いてあり、Webページ上にもalt属性として記載があったので、テキストできちんと比較できることがわかった。

認証の流れは下記となる。

  • 楽天証券にログインするとメールで認証コードが送られる
  • メール本文を参照して認証コードを取得
  • メールから取得した認証コードをWebページ上で選択する

ソースコード

    クラス中に実装しているメソッドの抜粋が上記。下記の流れになっている。

    • 画面に表示されたメール送信日時を取得する
    • 追加認証メールを取得する
    • メール本文に記載されている認証コード(どの画像かの文字列)を取得する
    • メール本文から取得した認証コードと同じ画像をクリックする
    • 認証するボタンをクリックする

    GmailのAPIを利用して楽天証券から送られた追加認証メールを取得するロジックは上記。これもクラス中に実装しているメソッドの抜粋となっている。

      その他

      • 3回連続で追加認証に失敗すると口座がロックされるため、この自動操作で追加認証に失敗した場合はアラートを出す仕組みがあったほうが良い。