我怎样才能选择一个 html 元素,无论它位于 selenium 中的哪个框架中?

2024-12-18 08:38:00
admin
原创
142
摘要:问题描述:我正在尝试选择位于 iframe 内且可能位于其他 iframe 中的元素。是否有可能在 (python)selenium 中不先选择 iframe 而选择某个 (子)iframe 中的元素?有没有办法以某种方式“循环”遍历每个 iframe 并检查在哪里可以找到我的元素……?那么,在元素、 htm...

问题描述:

我正在尝试选择位于 iframe 内且可能位于其他 iframe 中的元素。

是否有可能在 (python)selenium 中不先选择 iframe 而选择某个 (子)iframe 中的元素?有没有办法以某种方式“循环”遍历每个 iframe 并检查在哪里可以找到我的元素……?

那么,在元素、 html 内容和 iframe 即将被加载的情况下,该怎么做呢……?


解决方案 1:

,如果不切换到相应的,就无法通过 Selenium 与任何WebElement进行交互<iframe>iframe

原因 :

当页面加载时,Selenium的焦点默认保持在顶部窗口上。顶部窗口包含其他窗口<iframes>框架集。因此,当我们需要与iframe 内的WebElement进行交互时,我们必须<iframe>通过以下方法之一切换到相应的窗口:


帧切换方法:

我们可以通过3种方式切换至框架。

按框架名称

iframe 的Name属性,通过它我们可以切换到它。

例子:

driver.switch_to.frame("iframe_name")

按帧 ID

iframe 的ID属性,通过该属性我们可以切换到它。

例子:

driver.switch_to.frame("iframe_id")

按帧索引

假设页面中有10个框架,我们可以通过索引切换到iframe。

例子:

driver.switch_to.frame(0)
driver.switch_to.frame(1)

切换回主框架

default_content()我们可以使用或切换回主框架parent_frame()

例子:

driver.switch_to.default_content()
driver.switch_to.parent_frame()

切换框架的更好方法:

切换框架的更好方法是通过设置WebDriverWait为来诱导目标框架的可用性,如下所示:expected_conditionsframe_to_be_available_and_switch_to_it

  • 通过框架ID

 WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"id_of_iframe"))
  • 通过框架名称

 WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.NAME,"name_of_iframe")))
  • 通过框架Xpath

 WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"xpath_of_iframe")))
  • 通过Frame CSS

 WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,"css_of_iframe")))

参考

您可以在以下位置找到相关的详细讨论:

  • iframe 下 #document 的处理方法

解决方案 2:

编写自己的递归查找器应该很容易。抱歉,我不懂 Python,但在 Java 中应该是这样的:

public void findInAllFrames(WebElement e, String targetIdStr) {

    List<WebElement> l = e.findElements(By.tagName("iframe"));

    for(int inx=0; inx<l.size(); inx++) {
        List<WebElement> targets = l.get(inx).findElements(By.id(targetIdStr));
        if(targets.size()>0) {
            // Do something with your targets
        }

        findInAllFrames(l.get(inx), targetIdStr);
    }
}
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用