如何使用Python在iframe中切换Selenium焦点

2024-06-28 20:25:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法从网站的下拉菜单中选择复选框。下拉列表位于iframe中,当我尝试切换到iframe时,我会不断收到TimeoutException消息:

下面是我正在尝试的代码和HTML。我是Python新手,因此在此方面的任何帮助都将不胜感激

Python:

wait = WebDriverWait(driver, 20)

frm1= wait.until(EC.presence_of_element_located((By.ID, "ReportViewerControl_ctl04_ctl03_ctl01")))

driver.switch_to.frame(frm1)

HTML:

<iframe id="ReportViewerControl_ctl04_ctl03_ctl01" onclick="event.cancelBubble=true;" onactivate="event.cancelBubble=true;" style="display: block; position: absolute; z-index: 10; left: 208px; top: 35px; width: 198px; height: 166px;" src="javascript:'';" frameborder="0" title="Area place holder" longdesc="Area place holder" name="ReportViewerControl_ctl04_ctl03_ctl01"></iframe>

Tags: eventtruehtmldriverplaceareaiframewait
1条回答
网友
1楼 · 发布于 2024-06-28 20:25:36

要在<iframe>而不是presence_of_element_located()内切换Selenium的焦点,您必须:

  • 诱导WebDriverWait使所需的帧可用,并切换到它
  • 您可以使用以下任一Locator Strategies
    • 使用CSS_SELECTOR

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"iframe[name^='ReportViewerControl'][longdesc='Area place holder']")))
      
    • 使用XPATH

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[starts-with(@id, 'ReportViewerControl') and @title='Area place holder']")))
      
    • 注意:您必须添加以下导入:

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.common.by import By
      from selenium.webdriver.support import expected_conditions as EC
      

参考文献

您可以在以下内容中找到一些相关讨论:

相关问题 更多 >