Я пытаюсь запустить Chrome
, используя selenium webdriver
без каких-либо ограничений безопасности в рамках эксперимента.По сути, я пытаюсь получить доступ к контексту iframe
из другого источника, чем моя страница.
Очевидно, что по умолчанию я получаю исключение Cross-Origin - это то, чего я хочу избежать, и я знаю, что могу добиться этого, используя browser extension
, но я хочу найти альтернативы.
Исключение, которое я получаю при попытке доступа к контексту iframe:
DOMException: заблокирован фрейм с источником "file: //" от доступа к фрейму перекрестного происхождения.
Я пытался установить любой из предложенных флагов, которые я нашел в Интернете и официальной документации при запуске Chrome/Chromium
:
'--allow-file-access-from-files',
'--system-developer-mode',
'-–allow-file-access-from-files',
'--disable-features=IsolateOrigins',
'--disable-web-security',
'--user-data-dir=/home/chrome-dir',
'--disable-features=CrossSiteDocumentBlockingIfIsolating'
Моя HTML-страница:
<html>
<body>
<iframe width="560" height="315" src="https://www.youtube.com></iframe>
</body>
</html>
Скрипт, которыйЯ ввожу:
for (let i = 0; i < window.frames.length; i++) {
try {
const frame = window.frames[i];
console.log(frame.name, frame.document);
} catch (e) {
console.log(e);
}
}
Код моего веб-драйвера:
const { Builder, Capabilities } = require('selenium-webdriver');
const fs = require('fs');
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
function constructChromeOptions() {
const options = {
'args': [
'--allow-file-access-from-files',
'--system-developer-mode',
'--force-dev-mode-highlighting',
'-–allow-file-access-from-files',
'--disable-web-security',
'--user-data-dir=/home/chrome-dir',
]
};
return options;
}
function constructChromeCapabilities(packedExtensionPath) {
const chromeCapabilities = Capabilities.chrome();
const chromeOptions = constructChromeOptions(packedExtensionPath);
const capabilities = chromeCapabilities.set('chromeOptions', chromeOptions);
return capabilities;
}
(async function init() {
let driver = await new Builder()
.withCapabilities(constructChromeCapabilities())
.forBrowser('chrome')
.build();
await driver.get(`file:///${__dirname}/iframes.html`);
const js = fs.readFileSync('scripts/inject.bundle.js', 'utf8');
driver.executeScript(js);
}();