当前位置: 首页 > 知识库问答 >
问题:

未捕获的DOMExc的:阻止来源"http://localhost:8080"的帧访问跨来源的帧,而在页面中列出的ifras

季俭
2023-03-14

我正在尝试列出页面中所有 iframe的名称,以便我可以通过 Selenium 访问它们。

问题是ifra的名称每次都会更改,因此我需要循环遍历所有这些名称。

我得到:

未捕获的DOMException:阻止了具有原点的帧“http://localhost:8080“访问交叉原点框架。

当我尝试使用以下命令循环遍历它们时出错:

for (var f = 0; f < window.frames.length; f++) {
    console.log(window.frames[f].name)
}

有没有办法以不同的方式获取 iframe 的名称?

共有3个答案

笪昌翰
2023-03-14

脏溶液:

对于windows:

chrome.exe --user-data-dir="" --disable-web-security

对于mac:

open -a Google\ Chrome --args --disable-web-security --user-data-dir=""

这样你就打开了chrome,让它忽略了网络安全。

吉凯捷
2023-03-14

你可以尝试这样的东西:(不确定JavaScript)

var iframeElems = driver.findElements(webdriver.By.tagName("iframe"));

迭代此列表以获取属性。

for (var f = 0; f < iframeElems.length; f++) {
    console.log(iframeElems.getAttribute("attribute name"))
}
勾学博
2023-03-14

此错误消息。。。

Uncaught DOMException: Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame.

...意味着WebDriver实例被阻止访问跨原点框架。

同源策略:同源策略限制从一个来源加载的文档或脚本如何与来自另一个来源的资源交互。它是隔离潜在恶意文档的关键安全机制。

跨源资源共享(CORS):跨源资源共享(CORS)是一种机制,它使用额外的HTTP头来告诉浏览器客户端,让在一个源(域)上运行的AUT(测试中的应用程序)具有从不同源的服务器访问选定资源的权限。当web应用程序请求来源(< code >域 、< code >协议和< code >端口)不同于其自身来源的资源时,它会发出跨来源HTTP请求。

以下是与URL < code > http://store . company . com/dir/page . html 进行来源比较的示例

URL                                                  Outcome    Reason
http://store.company.com/dir2/other.html             Success
http://store.company.com/dir/inner/another.html      Success
https://store.company.com/secure.html                Failure    Different protocol
http://store.company.com:81/dir/etc.html             Failure    Different port
http://news.company.com/dir/other.html               Failure    Different host

当您尝试循环遍历帧时,您的脚本/程序试图访问

如果两个网页的协议、端口(如果指定了一个)和主机相同,则两个网页具有相同的来源。您将看到这有时被称为“scheme/host/port tuple”(其中“tuple“是由三个组件组成的集合,它们一起构成一个整体)。当您想要访问所需的帧时,可能协议、域、主机名和端口必须与同一域相同。

AUT可能包含许多框架/ iframe,其中一些可能仅在某些JavaScript / Ajax完成后加载,其中一些可能将样式属性设置为display:none;或隐藏的可见性。当然不需要与所有这些人互动。因此,识别

  • 帧名称
  • 帧标识
  • 帧索引
  • 网络元素

根据最佳实践,当您打算切换到框架时,请根据下面的参考资料为frameToBeAvailableAndSwitchToIt诱导WebDriverWait。

在这里,您可以找到关于未捕获DOMExc的相关讨论

一些参考资料:

> < li>

在本讨论中,您将看到关于安全性错误的详细分析:阻止具有原点的帧访问跨原点的帧

在本讨论中,您将发现在不使用driver.switchTo()的情况下切换到框架中的元素的不同方法。Selenium Webdriver Java中的frame(“frameName”)?

在本讨论的“切换帧的更好方法”部分中,您将找到有关如何选择html元素的不同方法,无论它在硒中的哪个帧中?

 类似资料: