【问题标题】:Python with selenium: unable to locate element which really exist带有硒的Python:无法找到真正存在的元素
【发布时间】:2014-08-13 16:32:58
【问题描述】:

我一直在尝试填充输入:

<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]")(萤火虫的路径)

  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: 消息:'无法定位元素:(...)

你知道我做错了什么吗?

【问题讨论】:

  • 是 iframe 中的元素吗?
  • 除了@alecxe 所说的之外,是否还有一个“附近的”用户名字段可供查找并与之交互?
  • @Amey, alecxe: 嗯,页面开始于:
  • @SiKing:不,在上一页。

标签: python selenium selenium-webdriver


【解决方案1】:

问题是你的input标签在iframe里面,你需要先switch to它:

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

【讨论】:

【解决方案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__")

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多