Python Selenium - Iframe 动态更改 Id 和名称但 Src 相同

Python Selenium - Iframe Dynamically Change Id and Name But Src is Same

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

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

已经尝试使用 'frame.size' 查找帧大小的数量,但由于它不可调用,它在字典中提供答案 'height:0,weight:0'

需要切换到此 iframe 并使用 iframe 内的元素

1) 在 iframe 中输入文本字段

2) select iframe 中的单选按钮

切换到 iframe 后无法 select 元素

代码截图 enter image description here

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

driver.switchTo().frame(0)

driver.switchTo().frame(1)

您可以等到框架加载如下。

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

我能够通过确定 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 在框架之间切换以及在切换框架时检测元素。

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

检测到并切换帧。然后就可以定位元素了。 这解决了挑战