sibahuです。今回は、Pythonのプログラムを書いている途中に【selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:】のエラーに悩まされたのでその解決方法をご紹介します。
実行環境
- OS:Windows 10 Home Ver1909
- Python 3.8.1
- pip 19.3.1
やりたかったこと
"googleを開き、検索ボックスに【xpathとは?】と入力して検索する"までの一連の流れをPythonで自動化したかった。
実際に起きたエラー
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import chromedriver_binary
from time import sleep
#ChromeDriverのパスを引数に指定しChromeを起動
PATH = "C:\Users\*****\Desktop\Selenium\chromedriver.exe"
driver = webdriver.Chrome(executable_path=PATH)
#指定したURLに遷移する
driver.get("https://www.google.co.jp")
#Googleの検索テキストボックスの要素をxpathから取得
element = driver.find_element_by_xpath("//*[@id='fakebox-input']")
#検索テキストボックスに"xpathとは?"を入力
element.send_keys("xpathとは?")
#Enterキーを押下してGoogle検索を実行
element.send_keys(Keys.ENTER)
このソースコードを実行すると・・・
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id='fakebox-input']"}
このようなエラーが出て上手く実行ができない
原因
XPathはあっているのに、[@id='fakebox-input']のようなIDはないよ!となぜエラーが出るのか悩まされていると・・・ちょっとしたミスを見落としていました。
自分が取得していたXPathは新しく開きなおしたChromeのXpathを指定していました。

//*[@id="fakebox-input"]
しかし、ソースコードで開いたChromeのXPathを調べると・・

//*[@id="tsf"]/div[2]/div[1]/div[1]/div/div[2]/input
全然値が違います。これではっきりしたことは自分が新規で開き直したChromeとソースコードで開いているChromeは別物ということです。
解決方法
後は簡単です。先ほど分かった正しいXPathの値を指定してあげるだけです。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import chromedriver_binary
from time import sleep
#ChromeDriverのパスを引数に指定しChromeを起動
PATH = "C:\Users\*****\Desktop\Selenium\chromedriver.exe"
driver = webdriver.Chrome(executable_path=PATH)
#指定したURLに遷移する
driver.get("https://www.google.co.jp")
#Googleの検索テキストボックスの要素をxpathから取得
element = driver.find_element_by_xpath("//*[@id='tsf']/div[2]/div[1]/div[1]/div/div[2]/input")
#検索テキストボックスに"xpathとは?"を入力
element.send_keys("xpathとは?")
#Enterキーを押下してGoogle検索を実行
element.send_keys(Keys.ENTER)
ソースコードを実行すると。

自動でxpathとは?と検索してくれてしっかりと動作しました!
まとめ
今回は、【selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element:】が出た際に悩まされたことを書きましたが、XPathを指定してあげるときはくれぐれも自分で新規にタブを開き直すのではなくて、ソースコードから実行したブラウザのXPathを指定してあげるように気を付けようと勉強になりました。
コメント