我正在尝试选择一个驻留在 iframe 内并且可能驻留在其他 iframe 中的元素。
是否可以在(python)selenium中的某些(子)iframe中选择一个元素,而无需先选择iframe?有没有办法以某种方式“循环”每个 iframe 并检查在哪里可以找到我的元素...?
在元素、html 内容和 iframe 可能刚刚被加载的情况下如何做到这一点......?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
编写自己的递归查找器应该很容易。抱歉,我不懂 python,但在 Java 中它会是这样的:
public void findInAllFrames(WebElement e, String targetIdStr) { List l = e.findElements(By.tagName("iframe"));
for(int inx=0; inx targets = l.get(inx).findElements(By.id(targetIdStr));
if(targets.size()>0) {
// Do something with your targets
}
findInAllFrames(l.get(inx), targetIdStr);
}
} 否,无法通过 Selenium,无需切换到相应的
iframe。原因:
加载页面时,Selenium 的焦点默认保留在顶部窗口上。 顶部窗口包含其他
<iframes>和框架集。因此,当我们需要与 iframe 内的 WebElement 进行交互时,我们必须通过以下方法之一切换到相应的<iframe>:帧切换方法:
我们可以通过3种方式切换到框架。
按框架名称:
Name iframe 的属性,通过它我们可以切换到它。
示例:
driver.switch_to.frame("iframe_name")按帧 ID:
iframe的ID属性,通过它我们可以切换到它。
示例:
driver.switch_to.frame("iframe_id")按帧索引:
假设页面有10个frame,我们可以通过索引切换到iframe。
示例:
切换回主机:
我们可以使用
default_content()或parent_frame()切换回主框架示例:
切换框架的更好方法:
切换框架的更好方法是通过将
expected_conditions设置为frame_to_be_available_and_switch_to_it来诱导WebDriverWait以获得预期框架的可用性,如下所示:通过帧 ID:
通过框架名称:
通过框架Xpath:
通过框架CSS:
参考
您可以在以下位置找到相关的详细讨论: