web-dev-qa-db-ja.com

NoSuchElementException、Seleniumは要素を見つけることができません

textFieldをSeleniumで検索したいのですが、方法がわかりません(初めてセレンを使用します)。

私は試した:

 driver.findElement(By.id("originTextField"))

またはxPathと、chrome開発ツールで生成されたcssSelector文字列。

助けてください、私は説明をいただければ幸いです。

これはhtmlです:

enter image description here

10

NoSuchElementException

org.openqa.Selenium.NoSuchElementException 通称NoSuchElementExceptionextends org.openqa.Selenium.NotFoundException which WebDriverException のタイプです。

NoSuchElementExceptionは、次の2つの場合にスローされます。

  • WebDriver.findElement(By by)を使用する場合:

    _//example : WebElement my_element = driver.findElement(By.xpath("//my_xpath"));
    _
  • WebElement.findElement(By by)を使用する場合:

    _//example : WebElement my_element = element.findElement(By.xpath("//my_xpath"));
    _

他のWebDriverExceptionと同様にJavaDocsと同様に、NoSuchElementExceptionには次の定数フィールドが含まれている必要があります。

_Constant Field      Type                                        Value
SESSION_ID          public static final Java.lang.String        "Session ID"
e.g. (Session info: chrome=63.0.3239.108)

DRIVER_INFO         public static final Java.lang.String        "Driver info"
e.g. (Driver info: chromedriver=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 6.1.7601 SP1 x86)

BASE_SUPPORT_URL    protected static final Java.lang.String     "http://seleniumhq.org/exceptions/"
e.g. (For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html)
_

理由

NoSuchElementExceptionの理由は、次のいずれかです。

  • 採用したロケーター戦略は、 HTML DOM の要素を識別していません。
  • 採用したロケーター戦略は、ブラウザーの ビューポート 内にないため、要素を識別できません。
  • 採用したロケーター戦略は要素を識別しますが、属性style = "display:none;"が存在するために表示されません。
  • 採用したLocator StrategyuniquelyHTML DOM内の目的の要素を識別せず、現在他のhiddenを見つけています_/invisible要素。
  • 検索しようとしているWebElementは_<iframe>_タグ内にあります。
  • WebDriverインスタンスは、要素がHTML DOM内に存在/表示される前であっても、WebElementを探しています。

解決

NoSuchElementExceptionを解決する方法は、次のいずれかです。


参照

Seleniumpython クライアントベースの関連ディスカッション:

  • Chrome を使用する場合のSelenium「Selenium.common.exceptions.NoSuchElementException」
22
DebanjanB

あなたのコードは正しいですが、要素を見つけたときに問題が原因でページが完全に読み込まれなかったと思います。

Find要素の前に長いスリープを追加してみてください。スリープを追加しても機能する場合は、スリープを変更して待機します。

コードは次のとおりです。要素が存在しない場合は10秒待機することを意味します。

element = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.ID, "originTextField"))
)
2
yong