硒无法使用 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']
那么您还需要检查以下条件。
检查它是否在任何 iframe/frame/frameset
.
解决方法:先切换到iframe/frame/frameset,再与该网页元素交互
检查它是否在任何 shadow-root
.
解决方法:使用driver.execute_script('return document.querySelector
返回一个web元素,然后进行相应操作
确保在与元素交互之前正确呈现该元素。放一些 hardcoded delay
或 Explicit 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")
如果您已重定向到 new tab/ or new windows
而您还没有 切换 到那个特定的 new tab/new window
,否则您可能会得到NoSuchElement
异常。
解决方法:先切换到相关window/tab
如果您切换到 iframe 并且新的所需元素不在同一个 iframe 上下文中,那么首先 switch to default content
然后与之交互。
解决方法:切换到默认内容,然后切换到各自的iframe。
这是我得到的 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']
那么您还需要检查以下条件。
检查它是否在任何
iframe/frame/frameset
.解决方法:先切换到iframe/frame/frameset,再与该网页元素交互
检查它是否在任何
shadow-root
.解决方法:使用
driver.execute_script('return document.querySelector
返回一个web元素,然后进行相应操作确保在与元素交互之前正确呈现该元素。放一些
hardcoded delay
或Explicit 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")
如果您已重定向到
new tab/ or new windows
而您还没有 切换 到那个特定的new tab/new window
,否则您可能会得到NoSuchElement
异常。解决方法:先切换到相关window/tab
如果您切换到 iframe 并且新的所需元素不在同一个 iframe 上下文中,那么首先
switch to default content
然后与之交互。解决方法:切换到默认内容,然后切换到各自的iframe。