硒exceptions.NoSuchElementException:

selenium exceptions.NoSuchElementException:

html 代码片段为:

<thead id="addDet:cust:th" class="emp">
<tr id="addDet:cust:ch" class="emp">
<th class="emp" scope="col" id="addDet:cust:ch:j_idt484">S. No.</th>
<th class="emp" scope="col" id="addDet:cust:ch:j_idt487">Name 
<font color="#FA5882">*</font></th>

我尝试将字段填写为:

driver.find_element_by_id("addDet:cust:j_idt487").send_keys("XX")

但我得到的错误是:

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"psdetail:j_idt490"}

任何帮助都将不胜感激。

您的代码中有错字。你忘记了 :cust: 之后的 :ch:

修复您的选择器 (Imcphers answer/comments) 后,在您尝试查找该元素时,该元素是否可能不在 DOM 中?是动态加载的吗?如果是这样,您可能必须使用 explicitimplicit 等待。

http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp

试试看 driver.implicitly_wait(10) 初始化驱动程序后

尝试使用 xpath 包含或 CSS 开头 //xpath “//*[包含(。,'S. No.')]”

id 属性值看起来很像动态生成的。在这种情况下,依赖它不是一个好主意。相反,使用元素的文本:

driver.find_element_by_xpath("//th[. = 'S. No.']")

您提供的 xpath 没有指向要输入数据的字段,实际上它指向 header 列。这就是您无法向其中输入数据的原因。

请尝试使用下面的 xpath 在乘客详细信息的第一行填写姓名和年龄:

  1. 下面的代码将在第一行填写乘客姓名
driver.find_element_by_xpath("(//tbody[@id='addPassengerForm:psdetail:tb']//input[contains(@id,'psgnName')])[1]").send_keys("ABC")
  1. 下面的代码将在第一行填写乘客的年龄:
driver.find_element_by_xpath("(//tbody[@id='addPassengerForm:psdetail:tb']//input[contains(@id,'psgnAge')])[1]").send_keys("24")

与将数据输入乘客姓名的下一行类似,您只需将 xpath 的最后一部分从 [1] 调整为 [2]