先日、ゲームIngressのcommと言うプレーヤーのアクティビティログを、PhantomJSモジュールを使用して取得しようとしたところ、メールアドレスとパスワードでログインできない事象が発生したので、対処法を備忘録として記載する。
使用したPythonサンプルコード
説明の簡略化の為に、import文など省いている。
login_url = "https://www.ingress.com/intel?ll=35.663091,139.735247" GOOGLE_USER = os.environ['GOOGLE_USER'] GOOGLE_PASS = os.environ['GOOGLE_PASS'] driver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs') driver.get(login_url) driver.find_element_by_link_text('Sign in').click() WebDriverWait(driver, 10).until( expected_conditions.visibility_of_element_located((By.ID, 'Email')) ) idTextBox = driver.find_element_by_id('Email') idTextBox.send_keys(GOOGLE_USER) nextButton = driver.find_element_by_id('next') nextButton.click() WebDriverWait(driver, 10).until( expected_conditions.visibility_of_element_located((By.ID, 'Passwd')) ) driver.find_element_by_id('Passwd').send_keys(GOOGLE_PASS) driver.find_element_by_id('signIn').click() capture() # 画面キャプチャを取得する関数(ここでは内容割愛)
発生事象
driver.find_element_by_id(‘signIn’).click()ステップ後にアカウント再設定用のメールアドレス及び電話番号による追加認証画面に遷移して、Intel Mapページに遷移しない。
原因
普段使用していないブラウザ(PhantomJSのエミュレーションでセッション情報をなにも保持していない)からのアクセスで、追加認証情報を登録していた為。
解決方法
一番手間がかかるのは、当該追加認証画面へ遷移する場合を見越して、追加認証を処理するロジックを実装する手法。
対して、手っ取り早いのは、追加認証用のメールアドレス及び電話番号をGoogleのアカウント設定画面から削除すること。勿論、この変更に伴い、セキュリティは低下するので当該アカウントにメール等の重要なデータを紐付けしておかないことをお勧めする。