<h2>嵌入式框架</h2>
<p>根据<a href="http://jkorpela.fi/html/iframe.html" rel="nofollow noreferrer">Using inline frames</a>中的文档,内联框架是一种结构,它将文档嵌入到HTML文档中,以便在浏览器窗口的子窗口中显示嵌入的数据。这并不意味着完全包含,两个文档是独立的,它们都被视为完整的文档,而不是将其中一个作为另一个文档的一部分。在</p>
<hr/>
<h2>框架结构和详图</h2>
<ul>
<li><p>通常,iframe元素的形式如下:</p>
<pre><code><iframe src="URL" more attributes>
alternative content for browsers which do not
support iframe
</iframe>
</code></pre></li>
<li><p>支持iframe的浏览器在子窗口中显示URL引用的文档,通常有垂直和/或水平滚动条。这样的浏览器忽略iframe元素的内容(即开始标记<code><iframe...></code>和结束标记<code></iframe></code>之间的所有内容)。不支持iframe(或禁用了iframe)的浏览器则相反,即处理内容时好像不存在<code><iframe...></code>和{<cd2>}标记。因此,内容很重要,尽管被一些浏览器忽略了。</p></li>
<li><p>因此,总而言之,内联框架并不意味着<strong>包含特性</strong>,尽管有时它可能有类似的用途。</p></li>
<li><p>请注意,当使用内联框架时,浏览器(如果它支持它们)会向iframe元素中的<code>URL</code>所引用的服务器发送一个请求,在获得请求的文档后,它将在内联框架中显示。从这个意义上说,内联框架是一个联合浏览器-服务器问题,但只有浏览器需要明确地知道iframe;从服务器的角度来看,对文档只有一个普通的HTTP请求,它发送文档时不需要(或不需要)知道浏览器将如何处理文档。</p></li>
</ul>
<hr/>
<h2>更聪明的东西</h2>
<p>根据<em>最佳实践</em>在切换到<em>iframe</em>时,您需要归纳<em>WebDriverWait</em>,如下所示:</p>
<ul>
<li><p>切换到<strong>帧名称</strong>(Java示例代码):</p>
<pre><code>new WebDriverWait(driver, 20).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.name("frame_name")));
</code></pre></li>
<li><p>切换到<strong>iframe</strong><em>XPath</em>(Python示例代码):</p>
<pre><code>WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='ptifrmtgtframe' and @name='TargetContent']")))
</code></pre></li>
<li><p>切换到iframe<strong>iframe</strong><em>CssSelector</em>(C#示例代码):</p>
^{4美元</li>
</ul>
<hr/>
<h2>参考文献</h2>
<p>您可以在以下位置找到一些相关讨论:</p>
<ul>
<li><em>Python</em>:<a href="https://stackoverflow.com/questions/47770144/how-can-i-select-a-html-element-no-matter-what-frame-it-is-in-in-selenium/47771879#47771879">How can I select a html element no matter what frame it is in in selenium?</a></li>
<li><em>Java</em>:<a href="https://stackoverflow.com/questions/47467518/is-it-possible-to-switch-to-an-element-in-a-frame-without-using-driver-switchto/47472200#47472200">Is it possible to switch to an element in a frame without using driver.switchTo().frame(“frameName”) in Selenium Webdriver Java?</a></li>
<li><em>电子货币:<a href="https://stackoverflow.com/questions/49677267/how-to-wait-for-a-frame-to-load-before-locating-an-element/49686113#49686113">How to wait for a frame to load before locating an element?</a></li>
</ul>
<hr/>
<h2>tl;dr</h2>
<p><a href="http://jkorpela.fi/html/iframe.html#frames" rel="nofollow noreferrer">Inline frames vs. normal frames</a></p>