google-chrome - 禁用浏览器网络安全后,CORS 仍然有效
问题描述
所以我一直在测试一个使用 Selenium 的网站,特别是一个嵌入了 iframe 的信用卡表单的页面。我想访问所述 iframe 的内容,但由于 CORS,我收到错误消息:
Uncaught DOMException: Blocked a frame with origin "<url>" from accessing a cross-origin frame.
我做了一个快速的谷歌搜索,并意识到你可以使用“--disable-web-security”标志绕过 CORS,所以我的代码现在如下所示:
options = webdriver.ChromeOptions()
options.add_argument("--disable-web-security")
self.driver = webdriver.Chrome(os.getenv("CHROME_DRIVER"), options=options)
令人惊讶的是,CORS 异常不断出现,我目前正纠结于如何从这里开始。我确实必须访问 iframe 的内容,对此没有解决方法。
由于我对为什么这不起作用感到困惑,我将问题复制到另一个网站,在本例中为Amazon,它的功能类似(嵌入在 iframe 中的信用卡表格)。我在启用网络安全的情况下运行了代码,并得到了与预期相同的 CORS 错误。但是,正如前面提到的那样,我禁用了网络安全,并且它起作用了!我现在可以访问 iframe。
我还从当前最稳定的 (88) 降级到旧版本的 Chrome (86) 并且没有再发生任何事情。我正在使用 Ubuntu 20.04。
所以现在我想知道 - 为什么该标志不适用于我提到的第一个场景?第一个网站是否有可能强制浏览器的网络安全或相关的东西?我不是网络开发方面的专家,因此对此的任何意见都是有价值的。
解决方案
事实证明,我所需要的只是添加--disable-site-isolation-trials
一个非空的--user-data-dir
以及--disable-web-security
如here所述
推荐阅读
- php - 如何设置将检查 30 天或超过 30 天的有效期的条件
- vba - 在excel中复制两列中的匹配行
- xamarin - 如何将带有文本的内容区域添加到 TableView 的底部?
- javascript - 使用参数调用操作
- reactjs - 使用 webpack 加载器在 React 中加载图像
- azure - Azure CosmosDB 帐户:重新生成的帐户密钥需要多长时间才能生效?
- java - 将字符串输入存储在文件中
- regex-negation - 正则表达式匹配不在特定特殊字符之间的
- html - 从 HTML 访问 JSON 数据 - Angular 4
- java - 使用 REST 的 Java PayPal 客户端快速结帐(redirect_urls 不起作用)