硒无法使用 python 找到元素

selenium cannot find element using python

这是我得到的 html,我正在尝试 select 这个 fsuser 并使用 send_keys 输入一些值。 我试过这个:

input_username = driver.find_element_by_xpath("//table/tbody/tr[2]/td/form/table/tbody/tr[1]/td[2]/input")

但是是说:

NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"//table/tbody/tr[2]/td/form/table/tbody/tr[1]/td[2]/input"}
(Session info: chrome=99.0.4844.74)

HTML1 HTML2

可以直接使用name属性,不需要绝对的xpath。

试试这个:

Css:

input[name='fsuser']

像这样使用它:

input_username = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input[name='fsuser']")))
input_username.send_keys('some name')

xpath:

//input[@name='fsuser']

像这样使用它:

input_username = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@name='fsuser']")))
input_username.send_keys('some name')

进口:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

更新:

NoSuchElementException:

请检查 dev tools (Google chrome) 我们是否在 HTML-DOM 中有 unique 条目。

你应该检查的 xpath :

//input[@name='fsuser']

检查步骤:

Press F12 in Chrome -> 转到 element 部分 -> 执行 CTRL + F -> 然后粘贴 xpath 并查看是否需要 element正在 突出显示 1/1 匹配节点。

如果这是唯一的 //input[@name='fsuser'] 那么您还需要检查以下条件。

  1. 检查它是否在任何 iframe/frame/frameset.

    解决方法:先切换到iframe/frame/frameset,再与该网页元素交互

  2. 检查它是否在任何 shadow-root.

    解决方法:使用driver.execute_script('return document.querySelector返回一个web元素,然后进行相应操作

  3. 确保在与元素交互之前正确呈现该元素。放一些 hardcoded delayExplicit wait 然后再试一次。

    解决方法:time.sleep(5)

    WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='vaadin-text-field-container']//descendant::input[@part='value' and starts-with(@aria-labelledby, 'vaadin-text-field-input')]"))).send_keys("test")

  4. 如果您已重定向到 new tab/ or new windows 而您还没有 切换 到那个特定的 new tab/new window,否则您可能会得到NoSuchElement异常。

    解决方法:先切换到相关window/tab

  5. 如果您切换到 iframe 并且新的所需元素不在同一个 iframe 上下文中,那么首先 switch to default content 然后与之交互。

    解决方法:切换到默认内容,然后切换到各自的iframe。