我正在尝试将文本发送到输入字段,但硒无法找到该元素。
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="">
答案 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文档,否则我将无能为力。共享之前,您应该删除所有敏感信息。您代码中的其他元素似乎是正确的。