代码之家  ›  专栏  ›  技术社区  ›  Alexandre

iframe下文档的处理方法

  •  2
  • Alexandre  · 技术社区  · 7 年前

    <iframe id="FRAMENAME" src="/webclient/workspace/launch-task/REMbl?ds=BP" width="100%" height="100%" frameborder="0" data-navitemname="navitemname" style="" xpath="1">
    #document
        <html>
            CODE....
        </html>
    

    我发现解决这个问题的方法是简单地添加一个开关,如下所示:

    driver.switchTo().frame("FRAMENAME");
    

    但在下一行代码正常运行之前,需要一些额外的时间。

    我担心当我有很多脚本的时候,执行时间会太长。

    非常感谢。

    2 回复  |  直到 7 年前
        1
  •  3
  •   undetected Selenium    6 年前

    内联框架

    Using inline frames ,内联框架是一种将文档嵌入到HTML文档中的构造,以便 嵌入的数据显示在子窗口中 浏览器窗口的。这并不意味着完全包含两个文件,这两个文件是独立的,它们都被视为完整的文件,而不是将一个文件视为另一个文件的一部分。


    iframe结构和细节

    • 通常,iframe元素的形式为:

      <iframe src="URL" more attributes>
      alternative content for browsers which do not
      support iframe
      </iframe>
      
    • 支持iframe的浏览器在子窗口中显示URL引用的文档,通常带有垂直和/或水平滚动条。这样的浏览器忽略iframe元素的内容(即start标记之间的所有内容) <iframe...> 和结束标记 </iframe> <iframe…> </iframe> 标签不在那里。因此,内容很重要,尽管被一些浏览器忽略了。

    • 包含功能 ,尽管有时可能有类似的用途。

    • 请注意,当使用内联帧时,浏览器(如果它支持内联帧)会向 URL


    更聪明的东西

    最佳实践 当切换到 iframe公司 你需要诱导 WebDriverWait网站 具体如下:

    • 接通 框架名称 (Java示例代码):

      new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
      
    • iframe公司 (Python示例代码):

      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='ptifrmtgtframe' and @name='TargetContent']")))
      
    • 接通 iframe公司 (C#样本代码):

      new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.FrameToBeAvailableAndSwitchToIt(By.CssSelector("iframe#twitter-widget-0")));
      

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


    Inline frames vs. normal frames

        2
  •  5
  •   Oleksii    7 年前

    使用内部元素 iframe iframe公司 .

    你的解决方案 .switchTo().frame("FRAMENAME"); iframe公司 包装纸。