我正在尝试列出页面中所有 iframe
的名称,以便我可以通过 Selenium 访问它们。
问题是ifra
的名称每次都会更改,因此我需要循环遍历所有这些名称。
我得到:
未捕获的DOMException:阻止了具有原点的帧“http://localhost:8080“访问交叉原点框架。
当我尝试使用以下命令循环遍历它们时出错:
for (var f = 0; f < window.frames.length; f++) {
console.log(window.frames[f].name)
}
有没有办法以不同的方式获取 iframe
的名称?
脏溶液:
对于windows:
chrome.exe --user-data-dir="" --disable-web-security
对于mac:
open -a Google\ Chrome --args --disable-web-security --user-data-dir=""
这样你就打开了chrome,让它忽略了网络安全。
你可以尝试这样的东西:(不确定JavaScript)
var iframeElems = driver.findElements(webdriver.By.tagName("iframe"));
迭代此列表以获取属性。
for (var f = 0; f < iframeElems.length; f++) {
console.log(iframeElems.getAttribute("attribute name"))
}
此错误消息。。。
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元素的不同方法,无论它在硒中的哪个帧中?
我已经为我的站点使用了mautic时事通讯。 下面是我的代码。 这是我的 当我尝试提交时,控制台上显示以下错误: app.js:190未捕获的DOM异常:阻止原点为“https://resources.incarta.com.au”的帧访问跨原点帧。
问题内容: 我试图列出iframe页面中所有s 的名称,以便可以通过Selenium访问它们。 问题在于iframe每次更改的名称,因此我需要遍历所有这些更改。 我正进入(状态: 未捕获到的DOMException:阻止了起源为“ http:// localhost:8080 ”的框架访问跨域框架。 当我尝试使用以下方法遍历它们时出错: 有没有办法以其他方式获得名称iframe? 问题答案: 此错
问题内容: 我试图列出页面中所有s 的名称,以便可以通过Selenium访问它们。 问题在于每次更改的名称,因此我需要遍历所有这些更改。 我正进入(状态: 未捕获的DOMException:阻止了源为“ http:// localhost:8080 ”的框架访问跨域框架。 当我尝试使用以下方法遍历它们时出错: 有没有办法以其他方式获得名称? 问题答案: 此错误消息… …意味着 WebDriver
我试图打印一个由jspdf生成并加载到iframe的pdf,但我收到了错误消息: DOMException:阻止源为“http://localhost:8084”的帧访问跨源帧。 这是我的代码:
我制作了一个网站,它会打开一个带有以下JavaScript代码的弹出窗口: 此代码将标记添加到标记。 然后在JS中,我想用以下代码获得YouTube网站的标题: 所以我想有这个代码: 不幸的是,我的浏览器(谷歌Chrome),仍然打印一个错误: SecurityError:阻止了原点为“null”的帧访问跨原点帧。 知道如何解决这个问题吗?
我有一个。NET核心应用程序,它有一个REST API被一个角客户机使用,但遇到了CORS问题。 但仍在客户端(运行在本地端口4200上)中获取错误: CORS策略阻止从来源“HTTP://localhost:4200”访问位于“HTTP://localhost/myapi/api/table”的XMLHttpRequest:对飞行前请求的响应没有通过访问控制检查:它没有HTTP ok状态。