【问题标题】:Python Selenium - Iframe Dynamically Change Id and Name But Src is SamePython Selenium - Iframe 动态更改 ID 和名称但 Src 相同
【发布时间】:2018-01-04 03:52:05
【问题描述】:

问题: - 无法检测到 iframe 并切换到 iframe,因为 iframe id 和名称在每次加载时都会动态更改,但 src 保持不变。

也无法识别 xpath。找到使用 driver.find_element_by_tagname("iframe") 的 iframe 标记,但无法在页面源的 HTML 中查看标记 <iframe>。因此无法通过右键单击和 iframe 标签找到 xpath。

已经尝试使用“frame.size”查找帧大小的数量,但由于它不可调用,因此它在 dict 中提供了“height:0,weight:0”的答案

需要切换到这个 iframe 并使用 iframe 内的元素来处理

1) 在 iframe 中输入文本字段

2) 在 iframe 中选择单选按钮

切换到 iframe 后无法选择元素

代码截图 enter image description here

【问题讨论】:

  • @NarendraR - 你有解决方案吗?
  • 有时当我们将鼠标悬停在 iframe 上时会加载它。然后它将在页面源中可用。你可以试试。
  • @murthi 你能给我一个样本吗?
  • @Hema,你能添加那个 iframe HTML 代码吗?或者可以分享网址?
  • @Hema 你可以查看我的答案

标签: python-3.x selenium selenium-webdriver automated-tests browser-automation


【解决方案1】:

默认情况下,每个帧都分配有一个整数。所以你总是可以这样做:

driver.switchTo().frame(0)

driver.switchTo().frame(1)

【讨论】:

  • 这不起作用。但是我设法使用标记名获取 iframe id。由于只有 1 个
【解决方案2】:

您可以等到帧被加载,如下所示。

wait = WebDriverWait(driver, 300)
wait.until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,'//iframe')))

【讨论】:

  • 我已经尝试过了,它没有给出任何错误,但它没有选择 iframe 内的任何元素。它给出错误说“无法找到元素”。我还尝试在切换到框架后加载页面源,以检查 html 内容是否与实际网页框架源相同,并且显示相同。现在我不确定为什么它没有选择 iframe 中的元素并给出错误
  • 你检查过嵌套框架吗?请为该页面发布您的 html。
  • 有一个嵌套框架,但该元素位于 frame1 内部,而不是嵌套框架 (frame2)。 Frame2 是空白黑页的目标。
【解决方案3】:

我能够通过确定 iframe 的数量来回答这个问题。我使用了 'find_element's'_by_tagname('iframe') 而不是 find_element_bytagname('iframe') 如果页面源中存在,它能够找到超过 1 个 iframe。

这为我提供了总共 3 个 iframe 标记。然后我继续循环进入 iframe 并找到每个 iframe 的属性,例如 id、name 和 src。

然后我注意到其中一个 iframe src,指的是包含我正在寻找的元素的网址。然后我继续使用 if 语句切换到该特定框架。

一旦切换到 iframe,我就会继续获取元素。

这解决了如何使用 python-selenium 在框架之间切换并在切换框架时检测元素。

这里的关键是检测元素存在于哪个框架中并能够切换到该框架。框架可以嵌套在一个框架中,也可以嵌套在主窗口中的框架列表中。

在检测和切换帧时。然后将能够找到该元素。 这解决了挑战

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 2012-02-28
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多