質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4257閲覧

[Python3 Seleniumスクレイピング]Amazon Japanのログインボタンでエラー

Yukiya025

総合スコア86

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/10/15 09:51

編集2018/10/15 10:57

こんばんは! SeleniumでAmazon Japanに自動ログインするコードを書いています。

しかし、「ログイン Eメールまたは電話番号」のページの「次へ進む」でエラーになります。
email

idがcontinueであることはデベロッパーツールで確認済みなのですが、どうやってこのエラーを解決したら良いのでしょうか。
code

よろしくお願いしますorz

エラー該当コード

driver.find_element_by_id("continue").send_keys(Keys.ENTER)

エラー文

Traceback (most recent call last): File "amazonLog.py", line 31, in <module> driver.find_element_by_id("continue").send_keys(Keys.ENTER) ... ... selenium.common.exceptions.WebDriverException: Message: unknown error: cannot focus element (Session info: chrome=69.0.3497.100) (Driver info: chromedriver=2.42.591071 (0b695ff80972cc1a65a5cd643186d2ae582cd4ac),platform=Linux 4.15.0-20-generic x86_64)

コード全体

# coding: UTF-8 from time import sleep from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys import warnings warnings.filterwarnings('ignore') if __name__ == '__main__': # URL関連 url = "https://tinyurl.com/y7rhjdzm" login = "Myemail" password = "MyPassword" # ヘッドレスモードの設定。 # True => ブラウザを描写しない。 # False => ブラウザを描写する。 options = Options() options.set_headless(False) # Chromeを起動 driver = webdriver.Chrome(executable_path="/home/ayumka/chromedriver", chrome_options=options) # ログインページを開く driver.get(url) # ログオン処理 # ユーザー名入力 driver.find_element_by_id("ap_email").send_keys(login) driver.find_element_by_id("continue").send_keys(Keys.ENTER) # ブラウザの描写が完了させるためにsleep sleep(10) # パスワード入力 driver.find_element_by_id("ap_password").send_keys(password) driver.find_element_by_id("signInSubmit").send_keys(Keys.ENTER) # soupオブジェクトを作成 soup = BeautifulSoup(driver.page_source, "lxml") # ログイン後のトップページのソースを表示 # print(soup) # ドライバーをクローズ # driver.close() driver.get('https://amzn.to/2PzZzes') print("ログイン成功")

できましたー(≧∇≦)b

reraNine様のアドバイスで、driver.find_element_by_id("continue").send_keys(Keys.ENTER)driver.find_element_by_name('email').send_keys(Keys.TAB, Keys.ENTER)に差し替えました!

完成コード

# coding: UTF-8 from time import sleep from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.keys import Keys import warnings warnings.filterwarnings('ignore') if __name__ == '__main__': # URL関連 url = "https://tinyurl.com/y7rhjdzm" login = "myu.yukiyanagi@gmail.com" password = "yukiyanagi311" # ヘッドレスモードの設定。 # True => ブラウザを描写しない。 # False => ブラウザを描写する。 options = Options() options.set_headless(False) # Chromeを起動 driver = webdriver.Chrome(executable_path="/home/ayumka/chromedriver", chrome_options=options) # ログインページを開く driver.get(url) # ログオン処理 # ユーザー名入力 driver.find_element_by_id("ap_email").send_keys(login) driver.find_element_by_name('email').send_keys(Keys.TAB, Keys.ENTER) # ブラウザの描写が完了させるためにsleep sleep(10) # パスワード入力 driver.find_element_by_id("ap_password").send_keys(password) driver.find_element_by_id("signInSubmit").send_keys(Keys.ENTER) # soupオブジェクトを作成 soup = BeautifulSoup(driver.page_source, "lxml") # ログイン後のトップページのソースを表示 # print(soup) # ドライバーをクローズ # driver.close() driver.get('https://amzn.to/2PzZzes') print("ログイン成功")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

pythonでスクレイピングは未経験ですがご参考になればと思い、記載させていただきます。
該当のログインページで押下したいボタンですが、
同名のidが存在する場合、どちらのelement要素を取得したいか判断がつかず、
エラーとなるケースがあります。
今回のケースですと
<span><input>が該当するかと思われますので、xPath等、id以外の要素で取得を試みて下さい。

追記:
ログインページですので、影響度は少ないですが、
xPathで指定する場合、ページ側がボタンを増やしたりした際にこちらの望む要素を押下できない可能性はあります。
代案として、メールアドレスのelement要素を取得し、sendkeyでTabを押下し、
Enterを押下するといった方法もございますので、
参考になれば幸いです。
driver.find_element_by_name('email').send_keys(Keys.TAB, Keys.ENTER)

投稿2018/10/15 10:10

編集2018/10/15 10:44
reraNine

総合スコア124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yukiya025

2018/10/15 10:58

reraNine様、ありがとうございます(≧▽≦) できました! 助かりましたー!
reraNine

2018/10/16 00:40

良かったです!また何か不明な点がございましたら、できる限り回答させていただきますので、 よろしくお願い致します。 私も近々pythonにてスクレイピングを実施する予定ですので、 不明点が会った際、何卒お力添えいただきたく存じます(*´ω`*)
Yukiya025

2018/10/16 12:45

心強いお言葉ありがとうございます(≧∇≦) そうなんですね! 私のGitHubレポジトリに今回のコードなど上げているのでよかったらご覧ください(*^^*) 今回の↓ https://github.com/Yukiya025/YahooLogin Python関係のフリーランス求人をスクレイピング https://github.com/Yukiya025/scrapefreelancer 博多駅起点100km圏内でPythonとつぶやいた人のIDを一覧表示 https://github.com/Yukiya025/fuk_tweet
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問