未捕获的DOMException:在页面中列出iframe时,阻止访问跨源帧的源"http:// localhost:8080"的帧

Two*_*rts 2 javascript iframe selenium same-origin-policy cors

我试图列出iframe页面中所有s 的名称,所以我可以通过Selenium访问它们.

问题是iframe每次更改的名称,所以我需要循环遍历所有这些.

我正进入(状态:

未捕获的DOMException:阻止具有原点" http:// localhost:8080 "的帧访问跨源帧.

我尝试使用以下方法循环时出错:

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

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

Deb*_*anB 8

此错误消息...

Uncaught DOMException: Blocked a frame with origin "http://localhost:8080" from accessing a cross-origin frame.
Run Code Online (Sandbox Code Playgroud)

...意味着webdriver的实例阻挡从访问跨来源帧.


同源政策

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


跨源资源共享(CORS)

跨源资源共享(CORS):跨源资源共享(CORS)是一种机制,它使用额外的 HTTP标头告诉浏览器客户端让在一个源(域)上运行的 AUT(正在测试的应用程序)具有访问权限从不同来源的服务器中选择的资源.一个Web应用程序进行跨域HTTP请求时,它要求具有不同的原点(资源domain,protocolport)比它自己的起源.


原产地的例子

以下是与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
Run Code Online (Sandbox Code Playgroud)

什么地方出了错

当你试图遍历frames你的脚本/程序试图<iframe>使用JavaScript 访问具有不同来源的一个时,如果你已经实现它将是一个巨大的安全漏洞.如上所述,同源策略浏览器会阻止尝试访问<iframe>具有不同来源的脚本.

如果两个网页的协议,端口(如果指定了端口)和主机相同,则两个页面具有相同的来源.你会看到这被称为"scheme/host/port tuple"有时(其中"元组"是一组三个组件,它们共同构成一个整体).或许协议,域名,主机名端口,当你想访问所需的框架必须是同你同一个域.

所述AUT可能包含众多/内部框架和其中一些可能只有某些之后被加载的JavaScript/Ajax的已完成,其中作为它们中的一些可以是具有样式属性设置为显示:无; 可视性隐藏.粗糙的不需要与所有这些进行交互.因此,这将是一个更好的方式来确定的属性<iframe>,并相应地进行切换.你可以切换到<iframe>通过:

  • Frame Name
  • Frame ID
  • Frame Index
  • WebElement

根据最佳实践,当你打算切换到一个框架时,会根据下面的引用为frameToBeAvailableAndSwitchToIt引导WebDriverWait.

在这里,您可以找到有关Uncaught DOMException的相关讨论


参考

一些参考: