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

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

ただいまの
回答率

87.37%

webdriverで自動ログインが出来ない理由

受付中

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,091

score 57

はじめまして。現在pythonのseleniumを使い、サイトへの自動ログインを試みております。

chormedriverでpython file.pyをすると無事ファイルは開くのですが、ログイン・パスが自動入力されるはずが何度行なっても入力が行われません。

エラー文にはclassに対するエラーが出ておりますが、エラー解消を特定出来ておりません。

どなたかご教示頂けますでしょうか?

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import urllib.parse
import time

driver = webdriver.Chrome("/Users/***/chromedriver")
driver.get("https://***/accounts/login/")

#ログインID・PWを入力
elem_search_word = driver.find_element_by_class_name("_2hvTZ")
elem_search_word.send_keys("****")
password = driver.find_element_by_name('password')
password.send_keys("****")
password.send_keys(Keys.ENTER)
driver.implicitly_wait(5)
  File "instagram.py", line 14, in <module>
    elem_search_word = driver.find_element_by_class_name("_2hvTZ")
  File "/Users/***/.pyenv/versions/3.7.4/lib/python3.7/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 "/Users/***/.pyenv/versions/3.7.4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 978, in find_element
    'value': value})['value']
  File "/Users/***/.pyenv/versions/3.7.4/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "/Users/***/.pyenv/versions/3.7.4/lib/python3.7/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":"class name","selector":"_2hvTZ"}
  (Session info: chrome=77.0.3865.120)
  (Driver info: chromedriver=2.32.498537 (cb2f855cbc7b82e20387eaf9a43f6b99b6105061),platform=Mac OS X 10.14.6 x86_64)
<div class="EPjEi">
<form class="HmktE" method="post">
<div class="                  Igw0E     IwRSH      eGOV_         _4EzTm        FBi-h                                                                                                      ">
</div>
<div class="-MzZI">
<div class="_9GP1n   ">
<label class="f0n8F ">
<span class="_9nyy2">電話番号、ユーザーネーム、メールアドレス</span>
<input class="_2hvTZ pexuQ zyHYP" aria-label="電話番号、ユーザーネーム、メールアドレス" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="75" name="username" type="text" value="">
</label>
<div class="i24fI">
</div>
</div>
</div>
<div class="-MzZI">
<div class="_9GP1n   ">
<label class="f0n8F ">
<span class="_9nyy2">パスワード</span>
<input class="_2hvTZ pexuQ zyHYP" aria-label="パスワード" aria-required="true" autocapitalize="off" autocorrect="off" name="password" type="password" value=""></label>
<div class="i24fI"></div></div></div>
<div class="                  Igw0E     IwRSH      eGOV_         _4EzTm    bkEs3                          CovQj                  jKUp7          DhRcB                                                    ">
<button class="sqdOP  L3NKy   y3zKF     " disabled="" type="submit">
<div class="                  Igw0E     IwRSH      eGOV_         _4EzTm                                                                                                              ">ログイン</div></button></div>
<div class="K-1uj Z7p_S"><div class="s311c"></div><div class="_0tv-g">または</div><div class="s311c"></div></div>
<div class="                  Igw0E     IwRSH      eGOV_         _4EzTm    bkEs3                          CovQj                  jKUp7          DhRcB                                                    ">
<button class="sqdOP yWX7d    y3zKF     " type="button">
<span class="coreSpriteFacebookIcon AeB99"></span>
<span class="KPnG0">Facebookでログイン</span></button></div>
<a class="_2Lks6" href="/accounts/password/reset/">パスワードを忘れた場合</a></form></div>

以上よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • t_obara

    2019/10/16 10:38

    エラーが出ているのであれば、表示されている全ての情報をご提示ください。

    キャンセル

  • KOO_

    2019/10/16 16:16

    該当htmlとエラー内容追加をしました。
    よろしくお願い致します。

    キャンセル

  • t_obara

    2019/10/17 13:06

    自分で試していないので、確たることは言えないのですが、私が調査するのであれば、
    http://nekoyukimmm.hatenablog.com/entry/2017/05/09/090117
    この辺や、複数要素が該当するので、find_elements_by_class_nameを利用してみるでしょうか。

    キャンセル

回答 4

+1

サイトによっては、Botによる自動アクセスを拒否している場合があります。

たとえば、reCAPTCHA v3というライブラリがあって、ユーザーによる意識的な操作がなくても、アクセスしているユーザーエージェントが自動アクセスかどうかの「怪しさ」を取得できるようになっています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

デバッガを使って、もしくは対話型環境で1文ずつ実行して、それとChromeの開発者ツールを両方見比べながら、1ステップずつ進めるとできると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/17 17:18

    ありがとう御座います。

    キャンセル

0

アクセスするWebブラウザによって出力する HTML を変えているサイト等もありますが、selenium でアクセスした際にその class 名は存在していますか?

driver.get で、 URL にアクセスした後に、driver.page_source 等の方法で、取得した HTML の内容を確認してみてください。
探している class 名は HTML の中に存在しているでしょうか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/16 16:23

    お世話になっております。
    確認したところ存在はしているようです。

    キャンセル

0

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import urllib.parse
import time


driver = webdriver.Chrome("/Users/***/chromedriver")
driver.get("https://***/accounts/login/")

driver.implicitly_wait(5)
#ログインID・PWを入力
elem_search_word = driver.find_element_by_css_selector("#react-root > section > main > div > article > div > div:nth-child(1) > div > form > div:nth-child(2) > div > label > input")
elem_search_word.send_keys("****")
password = driver.find_element_by_name('password')
password.send_keys("*******")
password.send_keys(Keys.ENTER)
driver.implicitly_wait(5)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 87.37%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る