使用Selenium的Python:无法找到确实存在的元素

33 投票
2 回答
47500 浏览
提问于 2025-04-18 10:47

我一直在尝试填写输入框:

<input id="PASSFIELD1" class="logField" type="password" onkeyup="next(this, event);" maxlength="1" autocomplete="off" name="PASSFIELD1"></input>

为此,我需要找到这个元素。

我尝试了以下几种方法:

  1. pass1=driver.find_element_by_name("PASSFIELD1")

  2. pass1=driver.find_element_by_id("PASSFIELD1")

  3. pass1= driver.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]") (这是从firebug获取的路径)

  4. 甚至等了100秒来找它

self.wait.until(EC.visibility_of_element_located((By.XPATH,"/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]"))) self.assertTrue(self.driver.find_element_by_xpath("/html/body/div[4]/div/div/div[2]/div/form/div[3]/table/tbody/tr[3]/td[2]/div/input[1]"))

我总是得到:

selenium.common.exceptions.NoSuchElementException: 消息:'无法找到元素:(...)

你知道我哪里做错了吗?

2 个回答

7

给驱动程序加点延迟,这样元素就能加载出来了。

import time
time.sleep(2)
department_element = driver.find_elements_by_id("__id_name__")

或者你可以用下面的代码,这样循环会一直运行,直到元素渲染出来。

while len(driver.find_elements_by_id("__id_name__")) == 0:
    pass
department_element = driver.find_elements_by_id("__id_name__")
34

问题在于你的 input 标签是在一个 iframe 里面,你需要先 切换到 这个 iframe 才能操作它:

frame = driver.find_element_by_xpath('//frame[@name="main"]')
driver.switch_to.frame(frame)
pass1 = driver.find_element_by_id("PASSFIELD1")

撰写回答