前提・実現したいこと
python seleniumで、とあるサイトのボタンのエレメントを、xpath以外(ここではclass name)から取得したく、コードを書いて実行しましたが、下記のようなエラーがでてしまいます。
(xpathであれば成功することは確認済み)
HTMLを見る限り、class="~~~"と書いてある部分からclass nameを知ることができるので、
driver.find_element_by_class_name を用いて取得できると考えていました。
xpathではエレメントを取得できることを確認済みですが、サイトの構成が変わってしまった場合に
対応できないため、サイトの構成にさほど影響を受けないエレメントでwebを操作したいというポリシーで
質問させていただいています。
質問内容
①HTMLにはclass="~~~"と書いてあるにもかかわらず、driver.find_element_by_class_nameで取得できないのはなぜでしょうか。
②①で、class nameでの取得が理屈上難しい場合、xpathを用いない要素の取得方法は他にありますでしょうか。
発生している問題・エラーメッセージ
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"css selector","selector":".btn btn-block btn-neg-light-gray btn-text-blue btn-icon-right btn-arrow-next"} (Session info: chrome=85.0.4183.102)
エレメントを取得したいボタンのHTMLソース
HTML
1<button type="submit" class="btn btn-block btn-neg-light-gray btn-text-blue btn-icon-right btn-arrow-next"> 2パスワードを入力する 3</button>
該当のソースコード
Python
1from selenium import webdriver 2from selenium.webdriver.support.ui import WebDriverWait 3from selenium.webdriver.support import expected_conditions 4from selenium.webdriver.common.by import By 5from selenium.webdriver.support import expected_conditions as EC 6import time 7from datetime import datetime 8from selenium.common.exceptions import TimeoutException 9 10 11MaxWaitTime = 100 12driver = webdriver.Chrome("c:/driver/chromedriver.exe") 13driver.get('URL') 14 15WebDriverWait(driver, MaxWaitTime).until(EC.presence_of_all_elements_located) 16 17element2 = driver.find_element_by_class_name("btn btn-block btn-neg-light-gray btn-text-blue btn-icon-right btn-arrow-next") 18element2.click()
試したこと
下記のように、XPATHでの指定であればエレメントを取得し、ボタンをクリックできました。
Python
1element2 = driver.find_element_by_xpath("/html/body/div/main/div/div/div/div/form/div[2]/div[2]/button")
環境
windows10
python 3.8.0
chromedriver :v85
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/25 13:45