【问题标题】:how to click button which is inside iframe using python selenium如何使用python selenium单击iframe内的按钮
【发布时间】:2019-12-12 10:52:45
【问题描述】:

他是我的样本 sn-p。我想使用 python selenium 点击 button-1034-btnIconEl。

<html>
<body>
<div class="x-container x-border-item x-box-item x-container-default x-layout-fit" id="iframes" >
<iframe ></iframe>
<iframe class="x-component x-fit-item x-component-default" frameborder="0"  id="rpIFrame-1239">
 <html>
 <body>
 <div> .....many divs 
  <div>
   <a><span><span id="button-1034-btnIconEl"></span></span></a>
  </div>
 </div>
 </body>
 </html>
</iframe>

我试过了

 driver.switch_to.frame(1)
 driver.find_element(By.XPATH, "//span[contains(@id,'button-1034-btnIconEl')]").click()

但得到

“NoSuchElementException:没有这样的元素:”

请帮我遍历一下。

【问题讨论】:

  • 试试这个答案link

标签: python selenium-webdriver selenium-chromedriver findelement


【解决方案1】:

使用框架id 代替索引

driver.switch_to.frame('rpIFrame-1239')

【讨论】:

    【解决方案2】:

    要打开 iframe,您可以使用:

    driver.switch_to.frame(driver.find_element_by_tag_name('iframe'))

    【讨论】:

    • 仍然相同“NoSuchElementException:没有这样的元素:无法找到元素:{“method”:“css selector”,“selector”:“[id="rpIFrame-1239"]"}”。这个框架在 div 里面。所以我必须切换 div 吗? @Sameer
    • 我给了 time.sleep(20) 来加载页面.. 之后也找不到元素
    • 我已经编辑了 iframe 的定位器。请使用新的
    • @AnuPriya 我已经更改了路径,请立即检查
    【解决方案3】:

    到按钮上的click()idbutton-1034-btnIconEl,因为所需的元素在 &lt;iframe&gt; 内,因此您必须:

    • 诱导 WebDriverWait 使所需的框架可用并切换到它
    • 诱导 WebDriverWait 使所需的元素可点击
    • 您可以使用以下任一Locator Strategies

      • 使用CSS_SELECTOR

        WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe.x-component.x-fit-item.x-component-default[id^='rpIFrame-']")))
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a > span > span[id^='button'][id$='btnIconEl']"))).click()
        
      • 使用XPATH

        WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@class='x-component x-fit-item x-component-default' and starts-with(@id, 'rpIFrame-')]")))
        WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, "//a/span/span[starts-with(@id, 'button') and contains(@id, 'btnIconEl')]"))).click()
        

    在这里你可以找到Ways to deal with #document under iframe的相关讨论

    【讨论】:

    • @AnuPriya xml 和定位器经过测试并且几乎同步。您可能在手工制作 HTML 时犯了一个错误。重新检查和重新测试,让我知道状态。
    猜你喜欢
    • 2020-01-25
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2021-11-06
    • 2019-09-01
    • 1970-01-01
    • 2018-04-30
    • 2021-01-31
    相关资源
    最近更新 更多