Использую Protractor. Никак не могу изменить Timezone в барузере. Что можно сделать?
Вот так не работает
capabilities: {
'browserName': 'chrome',
'time-zone': 'New_York',
}
, и вообще параметр time-zone не воспринимается.
Использую Protractor. Никак не могу изменить Timezone в барузере. Что можно сделать?
Вот так не работает
capabilities: {
'browserName': 'chrome',
'time-zone': 'New_York',
}
, и вообще параметр time-zone не воспринимается.
Да нету). Я вот ищу любой другой вариант что б запустить браузер в другой Таймзоне
@ 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 не связано
но если убрать TZ (переменную среды env) и headless: false
тогда все окей, окно откроет и все запускать без ошибок. Вот почему подумал что проблема в связке переменной среды и headless: false (т.е. открыть окно)
расшарьте код попробовать.
Все просто. Создайте себе фолдер (чтобы потом все удалить одним кликом).
npm install --save puppeteer
(110-115 mb установка node_modules)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 можно убрать, но если без окна запускать то можно проверить на скрине что работает и открылся сайт)
node test.js
Этот пример не работает на Ubuntu. Но работает на MacOS и Windows 7
Не совсем понял вопрос о комбинациях и Х
.
Но 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 .
здорово - ну так делайте без расчета на 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