Ich versuche, ein Element auszuwählen, das sich in einem Iframe befindet und sich möglicherweise in anderen Iframes befindet.
Ist es möglich, ein Element innerhalb eines (untergeordneten) Iframes in (Python) Selenium auszuwählen, ohne zuerst den Iframe auszuwählen? Gibt es eine Möglichkeit, jeden Iframe irgendwie zu „schleifen“ und zu überprüfen, wo mein Element zu finden ist ...?
Wie mache ich das, wenn das Element, der HTML-Inhalt und der Iframe möglicherweise gerade erst geladen wurden ...?
编写自己的递归查找器应该很容易。抱歉,我不懂 python,但在 Java 中它会是这样的:
否,无法通过 Selenium,无需切换到相应的
iframe
。原因:
加载页面时,Selenium 的焦点默认保留在顶部窗口上。 顶部窗口包含其他
<iframes>
和框架集。因此,当我们需要与 iframe 内的 WebElement 进行交互时,我们必须通过以下方法之一切换到相应的<iframe>
:帧切换方法:
我们可以通过3种方式切换到框架。
按框架名称:
Name iframe 的属性,通过它我们可以切换到它。
示例:
按帧 ID:
iframe的ID属性,通过它我们可以切换到它。
示例:
按帧索引:
假设页面有10个frame,我们可以通过索引切换到iframe。
示例:
切换回主机:
我们可以使用
default_content()
或parent_frame()
切换回主框架示例:
切换框架的更好方法:
切换框架的更好方法是通过将
expected_conditions
设置为frame_to_be_available_and_switch_to_it
来诱导WebDriverWait
以获得预期框架的可用性,如下所示:通过帧 ID:
通过框架名称:
通过框架Xpath:
通过框架CSS:
参考
您可以在以下位置找到相关的详细讨论: