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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

2回答

3820閲覧

selenium自動ログインについて

kooooooo

総合スコア1

Chrome

Google Chromeは携帯、テレビ、デスクトップなどの様々なプラットフォームで利用できるウェブブラウザです。Googleが開発したもので、Blink (レンダリングエンジン) とアプリケーションフレームワークを使用しています。

Python 3.x

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

0クリップ

投稿2020/05/17 12:24

前提・実現したいこと

python初心者です。
pythonを使用してアカウントを自動でログインするプログラムを作成したいと思ってます。
サイトのログイン画面でメールアドレスとパスワードまでは打ってくれますが
ログインだけできないです。
ログインまでいけるよう教えて頂けないでしょうか。

発生している問題・エラーメッセージ

下記のようにエラーが出てしまいます。

driver.find_element_by_class_name("button_ large_button_ main_action_button_").send_keys(Keys.ENTER) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 564, in find_element_by_class_name return self.find_element(by=By.CLASS_NAME, value=name) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 976, in find_element return self.execute(Command.FIND_ELEMENT, { File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".button_ large_button_ main_action_button_"} (Session info: chrome=81.0.4044.138)

下記作成コードです。

python

1from selenium import webdriver 2from selenium.webdriver.common.keys import Keys as keys 3 4driver = webdriver.Chrome("./chromedriver") 5 6url = "http://www." 7login="アドレス" 8password="パスワード" 9 10driver.get(url) 11driver.find_element_by_id("email").send_keys(login) 12driver.find_element_by_id("login_pwd").send_keys(password) 13driver.find_element_by_class_name("button_ large_button_ main_action_button_").send_keys(Keys.ENTER)

試したこと

driver.find_element_by_class_name("button_ large_button_ main_action_button_").send_keys(Keys.ENTER)に何かしら問題があると
思ったので、
その箇所の属性を変えたり、.send_keys(Keys.ENTER)の部分.click()変えたりしました。
(特に理由があってやったわけではないです)

補足情報(FW/ツールのバージョンなど)

使用しているバージョンです。
python3.82
selenium 3.141.0
chromedriverもchromeのバージョンと一致してます。

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

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

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

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

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

guest

回答2

0

ベストアンサー

python

1driver.find_element_by_css_selector('.button_.large_button_.main_action_button_').click()

がシンプルですね。
keysはimport不要です。

このサイトのurlを教えていただくことは可能ですか?
おそらくよりシンプルな書き方があると思います。

コメント受けて追記

これでいかがでしょうか。

python

1driver.get('https://www.atmos-tokyo.com/customer/menu') 2driver.find_element_by_id('email').send_keys('e-meiruadoresu') 3driver.find_element_by_id('login_pwd').send_keys('pasuwa-do') 4driver.find_element_by_name('btn_login').click()

投稿2020/05/17 21:40

編集2020/05/19 12:18
shirai

総合スコア1290

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

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

kooooooo

2020/05/18 14:50

回答頂きありがとうございます。 下記今回ログインしたいサイトです。 https://www.atmos-tokyo.com/customer/menu アドバイス頂いた通り、find_elements_by_css_selector()で再度試みましたが、上手くいきませんでした。 何か足りないコード等があるのでしょうか。
shirai

2020/05/19 12:18

追記しました。
kooooooo

2020/05/21 10:17

ログインすることができました。 ありがとうございます。
guest

0

クラス名でfindするとき、class="foo bar baz"のようになっている場合は、そのうちの1つだけを指定します。

そのクラス名の組み合わせでユニークに特定できる前提で、

Python

1for x in driver.find_elements_by_class_name("button_"): 2 if x.get_attribute("class")=="button_ large_button_ main_action_button_": 3 x.click()

でしょうか。あるいは、XPathを使って、

Python

1driver.find_element_by_xpath('//*[@class="button_ large_button_ main_action_button_"]').click()

あるいは、クラス名以外の指定方法を考えるか。

投稿2020/05/17 13:04

otn

総合スコア85901

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

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

kooooooo

2020/05/18 15:43

回答頂きありがとうございます。 勉強不足で申し訳ないのですが、 for x in driver.find_elements_by_class_name(""): にclass="button_ large_button_ main_action_button_" どれか適当なものを入れるという意味でしょうか。
otn

2020/05/18 15:53

勉強というか、回答を読解してもらえば良いです。 「適当なもの」のニュアンスが不明です。 回答では「そのうちの1つ」と書いたのですが? shiraiさんの回答の方がシンプルです。
kooooooo

2020/05/21 10:19

shiraiさんの回答でログインできました。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問