0

我的 Selenium 代码登录到一个网站,然后到达一个带有 iframe 中存在的按钮的页面。检查 chrome 中的元素并使用浏览器的控制台,我找到了 iframe:

iframe = document.getElementById("deputy-app-view1045")

然后我找到了该元素并能够单击它:

iframe.contentWindow.document.getElementById("csv_download").click()

在我的 python 代码中,我插入了:

browser.execute_script('document.getElementById("deputy-app-view1043").contentWindow.document.getElementById("csv_download").click()')

但是,错误是"TypeError: document.getElementById(...) is null".:(

[解决方案] 想通了!只需在 js 脚本中添加一个“返回”!感谢大家!旧版:

browser.execute_script('document.getElementsByClassName("app-iframe dg-content-box margin-none Report Builder (BETA) ready")[0].contentWindow.document.getElementById("csv_download").href') 

固定版本:

browser.execute_script('return document.getElementsByClassName("app-iframe dg-content-box margin-none Report Builder (BETA) ready")[0].contentWindow.document.getElementById("csv_download").href')
4

1 回答 1

0

由于所需的元素在元素<iframe>上调用click(),因此您必须:

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

    • 使用CSS_SELECTOR

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[id^='deputy-app-view']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "#csv_download"))).click()
      
    • 使用XPATH

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@id, 'deputy-app-view')")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.ID, "csv_download"))).click()
      

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

于 2020-01-09T08:40:37.457 回答