-1

他是我的示例片段。我想使用 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:没有这样的元素:”

请帮我遍历这个。

4

3 回答 3

0

使用框架id而不是索引

driver.switch_to.frame('rpIFrame-1239')
于 2019-12-12T10:58:06.100 回答
0

click()idbutton-1034-btnIconEl的按钮上,因为所需的元素在 an 内,<iframe>因此您必须:

  • 诱导WebDriverWait使所需的帧可用并切换到它
  • 诱导WebDriverWait使所需元素成为可点击的。
  • 您可以使用以下任一定位器策略

    • 使用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()
      

在这里你可以找到关于如何在 iframe 下处理#document的相关讨论

于 2019-12-12T11:44:42.557 回答
0

要打开 iframe,您可以使用:

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

于 2019-12-12T10:59:33.143 回答