Изменить TimeZone в Chrome или любом другом браузере

Использую Protractor. Никак не могу изменить Timezone в барузере. Что можно сделать?

Вот так не работает
  capabilities: {
    'browserName': 'chrome',
    'time-zone': 'New_York',
  }

, и вообще параметр time-zone не воспринимается.

Capabilities & ChromeOptions - ChromeDriver - WebDriver for Chrome что те нигде нету timezone

Да нету). Я вот ищу любой другой вариант что б запустить браузер в другой Таймзоне

@ Vitalii_Budniak выставить
system time zone на уровне контейнера вас устроит ?
пишут никак по другому не получается https://www.blackhatworld.com/seo/fake-system-time-in-selenium-chromedriver.949581/

реверс-инжениринг change-timezone расширения хрома думаю будет сложнее он повидимому полностью переопределяет

  const {
    toJSON, getYear, getMonth, getHours, toString, getMinutes, getSeconds, getUTCMonth, getFullYear, getUTCHours,
    getUTCFullYear, getMilliseconds, getTimezoneOffset, getUTCMilliseconds, toLocaleTimeString, toLocaleDateString,
    toISOString, toGMTString, toUTCString, toTimeString, toDateString, getUTCSeconds, getUTCMinutes, toLocaleString,
    getDay, getUTCDate, getUTCDay, getDate
  } = Date.prototype;

в своем фрейме

chrome.webNavigation.onCommitted.addListener(function (details) {
  if (config.addon.state === "ON") {
    var code = config.options;
    app.tab.inject(details.tabId, {
      "allFrames": false,
      "matchAboutBlank": true,
      "runAt": "document_start",
      "frameId": details.frameId,
      "code": "var timeZoneStorage = " + JSON.stringify(config.options.timezone) + ';'
    }, {
      "allFrames": false,
      "matchAboutBlank": true,
      "runAt": "document_start",
      "frameId": details.frameId,
      "file": "/data/content_script/inject.js"
    });
  }
});


знатоки хром расширений могут посоветовать лучше

Спс. Контейнер решение рабочее но такео себе. Как временное решение можно использовать puppeteer и просто передать переменную среды
env: { TZ: 'America/New_York', }

Но на Ubuntu 18 есть проблема запуска headless: false и
env: { TZ: 'America/New_York', }
Error - (node:25380) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome!
(chrome:25394): Gtk-WARNING: 04:46:28.183: cannot open display.

Если же запускать без переменной среды или headless: true тогда норм…

натурально если не headless - просит но не находит DISPLAY - запустите X - есть много способов напр Ubuntu Manpage: xvfb-run - run specified X client or command in a virtual X server environment
это никак с переопределением TZ не связано

1 лайк

но если убрать TZ (переменную среды env) и headless: false тогда все окей, окно откроет и все запускать без ошибок. Вот почему подумал что проблема в связке переменной среды и headless: false (т.е. открыть окно)

расшарьте код попробовать.

1 лайк

Все просто. Создайте себе фолдер (чтобы потом все удалить одним кликом).

  1. Выполните в терминале npm install --save puppeteer (110-115 mb установка node_modules)
  2. Создайте файл например test.js со следующим содержанием:
async function run() {
  const browser = await puppeteer.launch({
    headless: false,
    env: {
      TZ: "America/New_York"
    },
    defaultViewport: null,
    args: ["--window-size=1900,1200"]
  });
  const page = await browser.newPage();
  await page.goto("https://whoer.net/ru");
  await page.waitFor(10000);
  await page.screenshot({ path: "screenshots/testSite.png" });
  browser.close();
}

run();

(await page.screenshot можно убрать, но если без окна запускать то можно проверить на скрине что работает и открылся сайт)

  1. Запустить можно командой в терминале: node test.js

Этот пример не работает на Ubuntu. Но работает на MacOS и Windows 7

@ Vitalii_Budniak а в чем отличие от стандартной chrome, X, selenium комбинации?

Не совсем понял вопрос о комбинациях и Х.

Но puppeteer работает напрямую с браузером Chomium (по сути тот же Хром) без веб драйвера Selenium и он может принимать env - где можно нормально задать TZ. И кстати puppeteer работает только с Хром и больше ничего не поддерживает

Беда в том, что Selenium (и Protractor) не поддерживает изменений тайм зоны и не возможно передать переменную среды env: {TZ.......} чтоб запустить фактически на уровне процесса тайм зону.

@sergueik я так понимаю у вас также не запустился скрипт с headless: false + env ?

имеется в виду plain Selenium (не CDP) , chrome / chromium , xvfb или другой Х сервер

(годится не только для bionic)

sudo ln -fs /usr/share/zoneinfo/UTC /etc/localtime
timedatectl 
// скажет чтл UTC*




потом запускаем локально или через hub

говорит что я в UTC
чтобы изменит надо убивать хаб

Меня только локально интересует. Спс попробуюю сегодня-завтра

я запускал в виртуалбоксе - не самое быстрое решение но хоть что то чтоб попробовать. Chrome Devtoool наверное можно почитать как они делают возможным замену timezone .

Печалька 993628 - chromium - An open-source project to help move the web forward. - Monorail

здорово - ну так делайте без расчета на cdp может быть. кстати интересно что это вдруг так важно fake TZ ?

Есть фича на проекте, которая будет работать коректно, только если будет определенная таймзона (таймзона в браузере на клиенте)

Вариант с контейнером докера не рассматриваем?

Можно взять селенойдовский образ с хромом и добавить в него приём параметра - нужную таймзону.

Тогда можно нужные тесты гонять в нём… и всё.

@ NoksaAlexandr D. - докер или full scale VM - это тот способ который я предложил @ Vitalii_Budniak. разницы в селениум части стека нет. а вот интересно можно ли прикрутить nbofeaabhknfdcpoddmfckpokmncimpj timeShiftInject
??

[

Change Timezone (Time Shift) - Chrome interneta veikals
https://chrome.google.com › change-timezone-time-shif
](Change Timezone (Time Shift) - Chrome Web Store) - Translate this page
Easily change your timezone to a desired value