SecurityError: CSSStyleSheet.cssRules getter: 使用 Selenium Firefox 读取 CSS 样式表时不允许访问跨源样式表错误

090*_*239 5 java firefox selenium cross-domain selenium-firefoxdriver

我将 Selenium 与 Java 和 Chrome/Firefox 驱动程序一起使用。

FirefoxProfile profile = new FirefoxProfile();
profile.setPreference("javascript.enabled", true);
profile.setPreference("security.fileuri.strict_origin_policy", false);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability(FirefoxDriver.PROFILE, profile);
capabilities.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
capabilities.setCapability("acceptInsecureCerts",true);
FirefoxOptions options = new FirefoxOptions();
options.addCapabilities(capabilities);
WebDriver webDriver = new FirefoxDriver(options);
Run Code Online (Sandbox Code Playgroud)

尝试阅读 CSS 样式表

JavascriptExecutor js = ((JavascriptExecutor) driver);
Object properties = js.executeScript("return document.styleSheets");
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Exception in thread "main" org.openqa.selenium.WebDriverException: SecurityError: CSSStyleSheet.cssRules getter: Not allowed to access cross-origin stylesheet
Run Code Online (Sandbox Code Playgroud)

使用 chrome 驱动程序时,我收到错误error reading property

我正在尝试获取document.styleSheets页面的 ,但由于 CORS 规则而无法获取。如何禁用它们?

Deb*_*anB 2

似乎是一个错字。而不是documnent你的意思是可能document。因此,您的代码行将是:

Object properties = js.executeScript("return document.styleSheets");
Run Code Online (Sandbox Code Playgroud)

然而,这个错误信息...

Exception in thread "main" org.openqa.selenium.WebDriverException: SecurityError: CSSStyleSheet.cssRules getter: Not allowed to access cross-origin stylesheet
Run Code Online (Sandbox Code Playgroud)

...意味着cssRules getter()方法被阻止访问跨域样式表


细节

根据Unable to access cssRules property DOMException: "CSSStyleSheet.cssRules getter: Not allowed to access cross-origin stylesheet" 中的讨论,即使您的应用程序可能没有任何跨域样式表,但如果您使用的是,这些跨域原始样式表由Ghostery浏览器扩展注入。

因此,一个快速的解决方案是禁用Ghostery 扩展来解决该问题。