Python Selenium即使等待也无法找到元素

时间:2020-01-23 20:39:55

标签: python html 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="">

3 个答案:

答案 0 :(得分:1)

元素具有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()

答案 1 :(得分:0)

如果您的用例涉及在诱导WebDriverWait而不是click()的同时调用send_keys()presence_of_element_located(),则需要将expected_conditions用作element_to_be_clickable()如下:

因此,您可以有效地使用以下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)
    

参考文献

您可以在以下位置找到有关不同的预期条件的详细讨论:

答案 2 :(得分:0)

检查是否已安装并导入硒或其他必要的软件包是一个好主意。使用pip检查您的版本,并查看是否存在在线错误。请让我知道您使用的是哪个python版本。您提供的XPATH可能不正确,或者尝试增加WebDriverWait(1st,2nd)的第二个参数中的时间。如果您有指向此html页面的链接,这将非常有用,这样我可以检查您的XPATH。如果您需要进一步的帮助,请提供您的html页面。

编辑: 这是需要复制的内容,以便可以对其进行检查。如果您尝试了上述操作,除非看到html文档,否则我将无能为力。共享之前,您应该删除所有敏感信息。您代码中的其他元素似乎是正确的。