実現したいこと
herokuのサーバ上でpythonプログラムによるスクレイピングを実行したいです。
chrome+chromedriver+seleniumによってgoogleログインを行い、情報を取得したいサイトへ画面遷移を行いたいです。
ローカルの環境では実行および、情報の取得はできています。
herokuで同じように実行するにはどうしたらいいでしょうか?
発生している問題
画面遷移の流れは、
①driver.get(url)でgoogleのメールアドレス入力画面
②googleのパスワード画面
③情報を取得したいページ
となっています。②から③へ遷移ができません。
URL情報について、driver.current_urlで取得すると、
①https://accounts.google.com/signin/oauth/identifier?client_id= ...
②https://accounts.google.com/signin/v2/challenge/pwd?client_id= ...
③情報を取得したいページ
となるはずですが、
②の後、
https://accounts.google.com/signin/v2/challenge/az?client_id= ...
というよくわからないURLへ遷移してしまいます。
該当のソースコード
Python
1import time 2import requests 3from selenium import webdriver 4from selenium.webdriver.support.ui import WebDriverWait 5from selenium.webdriver.support import expected_conditions as EC 6from selenium.webdriver.common.by import By 7from selenium.webdriver.common.keys import Keys 8from selenium.webdriver.chrome.options import Options 9 10def main(): 11 # chromedriverのPATHを指定(Pythonファイルと同じフォルダの場合) 12 driver_path = '/app/.chromedriver/bin/chromedriver' 13 options = webdriver.ChromeOptions() 14 options.add_argument('--headless') 15 driver = webdriver.Chrome(options=options, executable_path=driver_path) 16 17 # Googleログイン 18 url = 'https://accounts.google.com/' 19 driver.get(url) 20 time.sleep(10) 21 22 #ログイン情報 23 login_id = #メールアドレス 24 login_pw = #パスワード 25 26 #メールアドレス入力 27 el_id = driver.switch_to.active_element 28 time.sleep(5) 29 el_id.send_keys(login_id) 30 time.sleep(5) 31 el_id.send_keys(Keys.ENTER) 32 time.sleep(15) 33 34 #パスワード入力 35 el_pw = driver.switch_to.active_element 36 time.sleep(5) 37 el_pw.send_keys(login_pw) 38 time.sleep(5) 39 el_pw.send_keys(Keys.ENTER) 40 time.sleep(15) 41 42 ### 情報取得 ### 43 # ... 44 ### 情報取得後 ### 45 time.sleep(1) 46 # 終了 47 driver.quit() 48 49if __name__ == '__main__': 50 51 main()
試したこと
現在、「情報をアクティブな場所に送る」という形をとっていますが、多くのサイトを参考にさせていただき、id指定、name指定、xpath指定等を行いましたが、同じ結果になりました。
例として、以下のようなコードです。
Python
1 ### IDを入力 2 login_id_xpath = '//*[@id="identifierNext"]' 3 # xpathの要素が見つかるまで待機します。 4 WebDriverWait(driver, wait_time).until(EC.presence_of_element_located((By.XPATH, login_id_xpath))) 5 driver.find_element_by_name("identifier").send_keys(login_id) 6 driver.find_element_by_xpath(login_id_xpath).click() 7 time.sleep(2) 8 9 ### パスワードを入力 10 login_pw_xpath = '//*[@id="passwordNext"]' 11 # xpathの要素が見つかるまで待機します。 12 WebDriverWait(driver, wait_time).until(EC.presence_of_element_located((By.XPATH, login_pw_xpath))) 13 driver.find_element_by_name("password").send_keys(login_pw) 14 time.sleep(1) # クリックされずに処理が終わるのを防ぐために追加。 15 driver.find_element_by_xpath(login_pw_xpath).click() 16 time.sleep(2)
driver.get(url)により、IDからパスワードまでを直リンクでとぶ、あるいはdriver.refresh()により、再読み込み等行いましたが意味がありませんでした。
time.sleep()の処理ですが、60秒以上指定しても効果ありませんでした。
補足情報
ローカル環境ですが、Windows10を使用しています。
VMによるUbuntuやコマンドプロンプト、git bash等で実行しましたが全てうまくいっています。試しにGCPでも試行錯誤しましたが、同様の結果でした。
なぜ「az」という場所に遷移してしまうのかだけでも構いませんので、教えていただけますでしょうか。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。