如何在Selenium Chromedriver中设置时区?



我不知道在使用Chromedriver时如何设置时区。是否有一些ChromeOptions参数或其他东西?

问题是,当我访问某些站点(例如,https://whoer.net)时,它显示的系统时间等于Windows上设置的时间。我希望能够以某种方式更改Chromedriver的时区以执行与时区相关的测试。

我尝试设置一些铬选项:

Map<String, Object> chromeOptions = new HashMap<String, Object>();
chromeOptions.put("args", Arrays.asList("--disable-system-timezone-automatic-detection", "--local-timezone"));
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);

它不起作用。

试图使用Javascript做一些奇怪的事情:

((JavascriptExecutor) driver).executeScript("Date.prototype.getTime = function() { return 1 };");

这也无济于事。

编辑:

找到这个 https://sqa.stackexchange.com/questions/8838/faking-system-time-date-with-selenium-webdriver

尝试使用从TimeShift复制的代码在页面上执行javascript.js如下所示:

((JavascriptExecutor) driver).executeScript("/*code from TimeShift.js here*/ TimeShift.setTimezoneOffset(-60);");

https://whoer.net 的系统时间没有改变。我做错了什么?

你可以通过使用Chrome DevTools Protocol来完成,这是python代码:

driver = webdriver.Chrome()
tz_params = {'timezoneId': 'America/New_York'}
driver.execute_cdp_cmd('Emulation.setTimezoneOverride', tz_params)

使用新的硒4,可以使用CDP本地完成

WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
DevTools devTools = ((ChromeDriver) driver).getDevTools();
devTools.createSession();
devTools.send(Emulation.setTimezoneOverride("Antarctica/Casey"));

下载以下 Maven 依赖项:

<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.0.0-alpha-6</version>
</dependency>

时区列表可以在这里找到

据我所知,您只能使用TZ变量或Decker Selenium来执行此操作。

但是,您是否能够找到可行的解决方案? 我正在尝试做同样的事情,但几乎没有找到解决方案。 我正在尝试用Python来做这件事。 Tz 变量解决方案仅限于 Windows 中的 Firefox,而安装在 Windows 上的 decker 硒是一场噩梦。

更新的 Python 解决方案可行(如下)

os.environ["DEBUSSY"] = "1">

请参阅:如何在 Python 中设置环境变量

我不确定是否有Java等效项,但是这个Python等效项在Windows中对我有用,但仅在Firefox中。 如果你找到一个Java等效的,那就太棒了,但如果这个问题对你很重要,Python就是你要走的路!:). 我相信您在Windows中仅限于三个字母,但在Linux操作系统中是完全自定义的。 例如UTC,GMT等。 希望这对您有帮助。 我花了很长时间寻找这个,但事实证明我想多了。 祝你好运!!

从设计上讲,将时区设置为现有浏览器窗口不是一个好主意:

  1. 应在启动时设置浏览器代理 IP 地址。
  2. 浏览器会话在启动时启动(并且可以在启动前恢复)。
  3. 专有
  4. 环境(包括时区、用户代理等)应在代理 IP 启动时解析。

所以我提出以下解决方案:

  1. 找到您要使用的代理 IP,对其进行地理定位。
  2. 通过代理 IP 从数据库还原现有浏览器会话。
  3. 对代理 IP 使用专有环境(时区、用户代理等)。

例如:

TZ="Asia/Shanghai" chromium --user-data-dir=".." --proxy-server=".." 

它工作正常。

PS 您需要修补本地铬以使用所需的环境部分,例如预定义的用户代理。

相关内容

  • 没有找到相关文章

最新更新