【问题标题】:Unable to locate element Selenium webdriver || Python无法定位元素 Selenium webdriver || Python
【发布时间】:2018-09-30 00:49:31
【问题描述】:
<div class="container-fluid ">
<div class="navbar-header">
<span id="problem_hide_search" class="nav navbar-left">
<span id="ca660735dba5d3003d7e5478dc9619b2_title" class="list_search_title navbar-text " style="float: left; display:inherit">Go to</span>
<div style="float: left; display:inherit">
<div class="input-group" style="width: 300px;">
<span class="input-group-addon input-group-select">
<label class="sr-only" for="ca660735dba5d3003d7e5478dc9619b2_text">Search</label>
<input id="ca660735dba5d3003d7e5478dc9619b2_text" class="form-control" name="ca660735dba5d3003d7e5478dc9619b2_text" style="width: 150px;" placeholder="Search"/>
</div>
</div>
<script data-comment="widget search load event">addLoadEvent(function () { new GlideWidgetSearch('ca660735dba5d3003d7e5478dc9619b2', 'problem', 'true'); });</script>

我试图通过切换到 iframe 并选择来定位搜索框

search_box = driver.find_element_by_xpath('//*@id="ca660735dba5d3003d7e5478dc9619b2_text"]')

但我得到错误无法找到消息:没有这样的元素:无法找到元素: 甚至以为我找到了一个匹配的节点。

【问题讨论】:

  • 找到一个匹配的节点...你在哪里找到的?也让我们知道谓词中缺少左括号是否是一个简单的错字

标签: python selenium selenium-webdriver


【解决方案1】:

正如您在问题中提到的那样,您尝试通过切换到 iframe 并选择来定位搜索框,您应该按照最佳做法:

  • 诱导 WebDriverWait 让 frame 可以切换如下:

    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))
    

    这里有详细的讨论How can I select a html element no matter what frame it is in in selenium?

  • 当您在 &lt;iframe&gt; 标记中寻找元素时,使用正确的 expected_conditions 诱导 WebDriverWait。考虑到您打算向元素发送文本这一事实,您可以使用以下代码行:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='navbar-header']//input[@class='form-control' and contains(@id,'_text')]"))).send_keys("hello")
    

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 2016-12-10
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多