Запуск Chrome, игнорирующий политику Cross-Origin Chrome - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь запустить 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);
}();
...