错误:访问属性的权限被拒绝;x";由于使用Selenium的相同/跨原产地政策?

错误:访问属性的权限被拒绝;x";由于使用Selenium的相同/跨原产地政策?,selenium,perl,same-origin-policy,cross-origin-read-blocking,Selenium,Perl,Same Origin Policy,Cross Origin Read Blocking,我想访问另一个HTML元素中的脚本内容,我可以很容易地识别它。我试着通过找到父母然后寻找孩子来找到元素,但我没能做到 所以我试着在firefox中使用控制台来读取内容,但我无法做到。看起来是这样的: 当我尝试对该元素执行任何操作时,我得到一个指向以下页面的链接,并出现错误: Permission denied to access property. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/

我想访问另一个HTML元素中的脚本内容,我可以很容易地识别它。我试着通过找到父母然后寻找孩子来找到元素,但我没能做到

所以我试着在firefox中使用控制台来读取内容,但我无法做到。看起来是这样的:

当我尝试对该元素执行任何操作时,我得到一个指向以下页面的链接,并出现错误:

Permission denied to access property. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Property_access_denied?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default
无法访问该对象以使用selenium进行自动测试?

此错误消息

Permission denied to access property. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Property_access_denied?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default
…表示脚本/程序试图访问您无权访问的对象。这可能是从其他域加载的元素,您违反了


同一原产地政策 是一种关键的安全机制,它限制从一个源加载的文档或脚本如何与另一个源加载的资源交互。它有助于隔离潜在的恶意文档,减少可能的攻击向量


起源 两个URL具有相同的来源(如果指定),并且两个URL的来源相同。您可能会看到它被引用为“scheme/host/port元组”,或者只是“tuple”。(一个“元组”是一组共同构成一个整体的项,是双元组/三元组/四元组/五元组/等的通用形式。)


一个例子 下表给出了与URL
http://store.company.com/dir/page.html

URL                                                  Outcome    Reason
http://store.company.com/dir2/other.html             Success    Only the path differs
http://store.company.com/dir/inner/another.html      Success    Only the path differs
https://store.company.com/page.html                  Failure    Different protocol
http://store.company.com:81/dir/page.html            Failure    Different port (http:// is port 80 by default)
http://news.company.com/dir/page.html                Failure    Different host
您还可以找到比较更复杂的[origindefinitionforfile:url]


遗传起源 从带有
about:blank
javascript:
URL的页面执行的脚本将继承包含该URL的文档的源,因为这些类型的URL不包含有关源服务器的信息

例如,
about:blank
通常用作新的空弹出窗口的URL,父脚本将内容写入其中(例如,通过
Window.open()
机制)。如果此弹出窗口还包含JavaScript,则该脚本将继承与创建它的脚本相同的源代码

数据:
:URL获取新的空安全上下文


改变起源 页面可能会更改其自身的来源,但有一些限制。脚本可以将
document.domain
的值设置为其当前域或其当前域的超域。如果设置为当前域的超域,则较短的超域将用于同一原点检查

例如,假设文档中的脚本位于
http://store.company.com/dir/other.html
执行以下操作:

document.domain = "company.com";
之后,页面可以通过
http://company.com/dir/page.html
(假设
http://company.com/dir/page.html
将其设置为
company.com
,以表示它希望允许)。但是,
company.com
不能
document.domain
设置为
othercompany.com
,因为这不是
company.com
的超域

浏览器会单独检查端口号。对
document.domain
的任何调用,包括
document.domain=document.domain
,都会导致端口号被
null
覆盖。因此,仅在第一个字段中设置
document.domain=“company.com”
,无法使
company.com:8080
company.com
对话。它必须在两个端口中都设置,以便它们的端口号都为空

注意:使用
document.domain
允许子域安全访问其父域时,需要将父域和子域中的
document.domain
设置为相同的值。这是必要的,即使这样做只是将父域设置回其原始值。否则可能会导致权限错误


解决方案 切换帧时,您需要诱导WebDriverWait,如下所示:

  • Java示例代码:

    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("iframe_id")));
    
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"iframe_id")))
    
  • Python示例代码:

    new WebDriverWait(driver, 10).until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("iframe_id")));
    
    WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"iframe_id")))
    

奥特罗 一些相关的讨论:

此错误消息

Permission denied to access property. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Property_access_denied?utm_source=mozilla&utm_medium=firefox-console-errors&utm_campaign=default
…表示脚本/程序试图访问您无权访问的对象。这可能是从其他域加载的元素,您违反了


同一原产地政策 是一种关键的安全机制,它限制从一个源加载的文档或脚本如何与另一个源加载的资源交互。它有助于隔离潜在的恶意文档,减少可能的攻击向量


起源 两个URL具有相同的来源(如果指定),并且两个URL的来源相同。您可能会看到它被引用为“scheme/host/port元组”,或者只是“tuple”。(一个“元组”是一组共同构成一个整体的项,是双元组/三元组/四元组/五元组/等的通用形式。)


一个例子 下表给出了与URL
http://store.company.com/dir/page.html

URL                                                  Outcome    Reason
http://store.company.com/dir2/other.html             Success    Only the path differs
http://store.company.com/dir/inner/another.html      Success    Only the path differs
https://store.company.com/page.html                  Failure    Different protocol
http://store.company.com:81/dir/page.html            Failure    Different port (http:// is port 80 by default)
http://news.company.com/dir/page.html                Failure    Different host
您还可以找到比较更复杂的[origindefinitionforfile:url]


遗传起源 从带有
about:blank
javascript:
URL的页面执行的脚本将继承包含该URL的文档的源,因为这些类型的URL不包含有关源服务器的信息

例如,
about:blank
通常用作新的空弹出窗口的URL,父脚本将内容写入其中(例如,通过
Window.open()
机制)。如果此弹出窗口还包含JavaScript,则该脚本