未捕获http://localhost:8080"异常:在页面中列出IFRAME时,阻止具有源DOMException的框架访问跨域框架

Uncaught DOMException: Blocked a frame with origin amp;quot;http://localhost:8080amp;quot; from accessing a cross-origin frame while listing the iframes in page(未捕获http://localhost:8080amp;quot;异常:在页面中列出IFRAME时,阻止具有源DOMException的框架访问跨域框架) - IT屋-程序员软件开

本文介绍了未捕获http://localhost:8080"异常:在页面中列出IFRAME时,阻止具有源DOMException的框架访问跨域框架的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

我收到:

未捕获DOMException:阻止源为"http://localhost:8080"的帧访问跨源帧。

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

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

是否有其他方式获取iframe的名称?

推荐答案

此错误消息.

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

.表示WebDriver实例阻止访问跨域框架。


同源策略

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


跨域资源共享(CORS)

Cross-Origin Resource Sharing (CORS):跨域资源共享(CORS)是一种机制,它使用额外的HTTP标头告诉浏览器客户端允许在一个源(域)运行的AUT(被测应用程序)拥有从另一个源(域)的服务器访问选定资源的权限。当Web应用程序请求的资源的来源(domainprotocolport)与其自身的来源不同时,它会发出跨域HTTP请求


来源示例

这里是源地址与URL的比较示例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

哪里出错了

当您尝试循环访问frames时,您的脚本/程序试图使用JavaScript访问不同来源的<iframe>,这将是一个巨大的安全缺陷,如果您能够做到这一点的话。如上所述,同源策略浏览器挡路脚本尝试访问不同来源的<iframe>

如果两个网页的协议端口(如果指定了一个)和主机相同,则这两个网页具有相同的来源。您有时会看到这称为"scheme/host/port tuple"(其中"元组"是一组共同组成整体的三个组件)。如果要访问所需的帧,协议主机名端口可能必须与您的相同域相同。

解决方案

AUT可能包含许多/IFRAMES,其中一些可能仅在某些JavaScript/Ajax完成之后才会加载,其中一些可能将样式属性设置为display:None;visiblity作为隐藏。当然,不需要与所有人进行交互。因此,识别<iframe>属性并相应地进行切换将是一种更好的方法。您可以通过:

切换到<iframe>
  • Frame Name
  • Frame ID
  • Frame Index
  • WebElement

根据最佳实践当您打算切换到框架诱导WebDriverWaitFORframeToBeAvailableAndSwitchToIt时,请按照下面的参考。

此处您可以在Uncaught DOMException

找到相关讨论

引用

部分参考:

  • 在本讨论中,您将找到有关SecurityError: Blocked a frame with origin from accessing a cross-origin frame

  • 的详细分析
  • 在本讨论中,您将发现Is it possible to switch to an element in a frame without using driver.switchTo().frame("frameName") in Selenium Webdriver Java?

  • 上的不同方法
  • 在本讨论的A Better Approach to Switch Frames部分中,您将发现How can I select a html element no matter what frame it is in in selenium?

  • 的不同方法

这篇关于未捕获http://localhost:8080&amp;quot;异常:在页面中列出IFRAME时,阻止具有源DOMException的框架访问跨域框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:未捕获http://localhost:8080&amp;quot;异常:在页面中列出IFRAME时,阻止具有源DOMException的框架访问跨域框架