使用Selenium的Python:无法找到确实存在的元素
我一直在尝试填写输入框:
<input id="PASSFIELD1" class="logField" type="password" onkeyup="next(this, event);" maxlength="1" autocomplete="off" name="PASSFIELD1"></input>
为此,我需要找到这个元素。
我尝试了以下几种方法:
pass1=driver.find_element_by_name("PASSFIELD1")
pass1=driver.find_element_by_id("PASSFIELD1")
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获取的路径)甚至等了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 个回答
给驱动程序加点延迟,这样元素就能加载出来了。
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__")
问题在于你的 input
标签是在一个 iframe
里面,你需要先 切换到 这个 iframe
才能操作它:
frame = driver.find_element_by_xpath('//frame[@name="main"]')
driver.switch_to.frame(frame)
pass1 = driver.find_element_by_id("PASSFIELD1")