如何通过 IE11 解决 selenium python 中嵌套 HTML 中的超链接?

Posted

技术标签:

【中文标题】如何通过 IE11 解决 selenium python 中嵌套 HTML 中的超链接?【英文标题】:How to address a hyperlink in a nested HTML in selenium python by IE11? 【发布时间】:2022-01-15 18:15:41 【问题描述】:

每个人都可以帮我解决单击 html 页面中的超链接的问题,该页面本身包含其正文中的 HTML 元素(4 级嵌套 HTML)吗?我尝试了不同的方法来解决 XPATH,但在运行期间它们不为人所知。我使用 selenium, Python3.9, IE11(这个项目必须使用 IE11)。

来自主 HTML 的完整 Xpath 是: /html/body/div[2]/div[2]/iframe/html/frameset/frame[2]/html/body/div/div[4]/div/iframe/html/body /div/div[@id='resultList']/div[2]/div[3]/table/tbody/tr/td[@id='resultList_0_3']/a

我使用这个 python 代码来访问它: web_driver.find_element_by_xpath("/html/body/div[2]/div[2]/iframe/html/frameset/frame[2]/html/body/div/div[4]/div/ iframe/html/body/div/div[@id='resultList']/div[2]/div[3]/table/tbody/tr/td[@id='resultList_0_3']/a").click( )

输出错误是:

selenium.common.exceptions.NoSuchElementException:消息:无法找到 xpath == /html/body/div2/div2/iframe/html/frameset/frame2/html/body/div/ 的元素div[4]/div/iframe/html/body/div/div[@id='resultList']/div2/div[3]/table/tbody/tr/td[@id='resultList_0_3']/a

对于通过 id, tag, ... 搜索的其他元素也会出现同样的错误

学士学位当我尝试访问 Xpath 时:/html/body/div[2]/div[2]/iframe selenium 成功找到链接,但在该级别之后找不到.

非常感谢。

[HTML 树][1] [1]:https://i.stack.imgur.com/V73KI.png

【问题讨论】:

嗨@golidar 这个问题怎么样? my answer below 对解决问题有帮助吗?如果有什么我可以在这里提供帮助的,请告诉我。 【参考方案1】:

重点是需要先切换到iframe,然后才能定位到iframe中的元素。在 selenium 中如何切换到嵌套 iframe 可以参考this blog 和this thread。

首先,您需要找到外部 iframe 并将它们存储在 web 元素中,然后您可以切换到 iframe。如果 iframe 是嵌套的,则需要一一切换。

我假设您可以通过 ids 找到 iframe,示例代码如下(您需要将 url、path 和 ids 更改为您自己的。您也可以通过其他方式找到 iframe,例如 xpath):

from selenium import webdriver
from selenium.webdriver.common.by import By

url = "https://your_site.com" 

driver = webdriver.Ie('your_path\\IEDriverServer.exe')
driver.get(url)
frame1 = driver.find_element(By.ID, id1);
driver.switch_to.frame(frame1);
frame2 = driver.find_element(By.ID, id2);
driver.switch_to.frame(frame2);
frame3 = driver.find_element(By.ID, id3);
driver.switch_to.frame(frame3);
driver.find_element(By.ID, id_of_hypelink).click();

【讨论】:

以上是关于如何通过 IE11 解决 selenium python 中嵌套 HTML 中的超链接?的主要内容,如果未能解决你的问题,请参考以下文章

解决selenium2在IE11上出错的问题,如Unable to get browser

为什么IE通过Selenium Web驱动程序永远打开网站?

Selenium通过WebDriver控制IE浏览器出错

Selenium c#如何通过JavaScript查找元素?

python selenium+ie 如何定位js生成的元素?

带有 IE11 的 Selenium 3.0.1 在 Windows 10 上找不到元素(在带有 IE11 的 Windows 7 上运行良好)