Python selenium即使使用wait也找不到元素

2024-06-26 11:08:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将文本发送到输入字段,但selenium无法找到元素。

element = WebDriverWait(b, 10).until(EC.presence_of_element_located((By.XPATH, '/html/body/table/tbody/tr[1]/td/form/div/table/tbody/tr[2]/td/table[2]/tbody/tr/td[4]/table/tbody/tr/td[1]/input')))
element.send_keys("Customer Care", Keys.ENTER)

我已经尝试使用XPATH、完整XPATH和ID来定位它,但它总是给我一个错误,表明它找不到元素 selenium.common.exceptions.TimeoutException

HTML元素的一个片段

<input class="iceInpTxt testBox" id="headerForm:jumpto" maxlength="40" name="headerForm:jumpto" onblur="setFocus('');iceSubmitPartial(form, this, event);" onfocus="setFocus(this.id);" onkeyup="iceSubmit(form,this,event);" onmousedown="this.focus();" type="text" value="">

Tags: formid元素inputseleniumtableelementthis
3条回答

元素具有ID,请将其用作定位器。检查元素是否位于iframe内:

wait = WebDriverWait(b, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'headerForm:jumpto')))
element.send_keys("Customer Care", Keys.ENTER)

如何切换到iframe:

wait = WebDriverWait(b, 10)

wait.until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR, "iframe_locator")))

element = wait.until(EC.element_to_be_clickable((By.ID, 'headerForm:jumpto')))
element.send_keys("Customer Care", Keys.ENTER)

# How to go back to default content
b.switch_to.default_content()

如果您的用例涉及调用click()send_keys()而诱导WebDriverWait而不是presence_of_element_located(),您需要使用expected_conditions作为^{},如下所示:

因此,您可以有效地使用以下Locator Strategies之一:

  • 使用CSS_SELECTOR

    WebDriverWait(b, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.iceInpTxt.testBox[id^='headerForm'][name$='jumpto']"))).send_keys("Customer Care", Keys.ENTER)
    
  • 使用XPATH

    WebDriverWait(b, 10).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='iceInpTxt testBox' and @id='headerForm:jumpto'][@name='headerForm:jumpto']"))).send_keys("Customer Care", Keys.ENTER)
    

参考资料

您可以在以下内容中找到关于不同预期_条件的详细讨论:

最好检查您是否安装并导入了selenium或其他必要的软件包。使用pip检查您的版本并查看是否存在联机错误。请告诉我您使用的python版本。您提供的XPATH可能不正确,或者可能尝试增加WebDriverWait(1st,2nd)的第二个参数中的时间量。如果你有一个指向这个html页面的链接,那么我就可以查看你的XPATH,这会更有帮助。如果您需要更多帮助,请提供您的html页面

编辑: 这是需要复制的东西,以便可以检查。如果您尝试了上述方法,我将无法提供帮助,除非我看到html文档。您应该在共享之前删除所有敏感信息。代码的其他元素似乎是正确的

相关问题 更多 >