Set Allow location [Chrome browser] by default

Теги: #<Tag:0x00007f738cbde500> #<Tag:0x00007f738cbde2d0> #<Tag:0x00007f738cbde140> #<Tag:0x00007f738cbddf88> #<Tag:0x00007f738cbddd58>

Добрый день.
Подскажите пожалуйста, кто как решал проблемы с Chrome browser > Allow location.
Как по дефолту разрешить локейшен для всех сайтов?
Какая проперти?
Заранее спасибо :wink:

Мне, почему-то, кажется, что та же самая, что и для разрешения диалога для скачивания файла:
profile.default_content_settings.popups со значением 0

1 симпатия

Нет, profile.default_content_settings.geolocation

enum ErrorCode {
  ERROR_CODE_NONE = 0,               // Chrome addition
  ERROR_CODE_PERMISSION_DENIED = 1,
  ERROR_CODE_POSITION_UNAVAILABLE = 2,
  ERROR_CODE_TIMEOUT = 3,
};
3 симпатии

Спасибо, если можно, было бы неплохо посмотерть реализацию, как вы добавляете это в преференсы :wink:

Лично я с джавой не много работаю, в основном питон-нода-пхп. Но исходя из https://sites.google.com/a/chromium.org/chromedriver/capabilities должно быть:

ChromeOptions options = new ChromeOptions();
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("profile.default_content_settings.geolocation", 2); // нужное значение
options.setExperimentalOption("prefs", prefs);
1 симпатия

Спасибо, но не помогло. Может ещё какие варианты решений?
У Вас это работает?

Я же говорю, что не пользуюсь. А какое значение вы ставите? Что вам нужно достичь? Судя по https://bugs.chromium.org/p/chromedriver/issues/detail?id=138 это работает.

У меня оно работает в моих фреймворках, но думаю вам бесполезно будет что-то из ноды:

client = webdriver.remote({
    desiredCapabilities: {
        // chrome | firefox | phantomjs
        browserName: 'chrome',
        'chromeOptions': {
            'args': ['--test-type', '--window-size=768,1024'],
             // chrome geolocation settings
            'prefs': {'profile.default_content_settings.geolocation': 2 }
        }
    },
    // silent | verbose | command | data | result
    logLevel: 'silent'
});

Для java как-то так:

ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("prefs", new JSONObject().put("profile.default_content_settings.geolocation", 1));

ну так, а выше тоже самое только через Map<String, Object>

Ага, сорри, не читал весь топик.

Спасибо большое всем, поптыаюсь ещё раз обяснить всё подробнее что мне нужно в конечном результате:

  1. Пользователь нажимает на кнопку “Добавить мой локейшен”
  2. На клик кнопки вызывается нативная реализация браузера, у хрома это такой поп-ап.
  3. Пользователь кликает allow, данные льправляются на сервер.

Мне нужно, что бы клике на кнопку “Добавить мой локейшен” не появлялся попап.

Я посмотрел файл Preferences для своего хрома, так вот как там это реализовано.
Он просто в добавляет в этот json новый обеькт и исключение с url и настройками для геолокации - 1 это разрешить, 2 - запретить.
При использовании prefs.put(“profile.default_content_settings.geolocation”, 1); поп-ап с локейшеном появляется.

Пробовали 0-1-2? результат один? Значит вы как-то не так создаете драйвер и оно туда не передается. Покажите код?

Пробовал все значения.
Все остальные значения подсавляются, а это нет.
У Вас поп-апа нет и локейшен разрешается?

Для хрома можно через такой костыль -
getDriver().navigate().to("chrome://settings/content"); getDriver().switchTo().frame("settings"); WebElement location = getDriver().findElement(By.xpath("//*[@name='location' and @value='allow']")); ((JavascriptExecutor) getDriver()).executeScript("arguments[0].click();", location); getDriver().findElement(By.xpath("//*[@id='content-settings-overlay-confirm']")).click();

Сейчас работает так:

Map<String, Object> prefs = new HashMap<>();
prefs.put("profile.default_content_setting_values.geolocation", 2);
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption("prefs", prefs);
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
new ChromeDriver(capabilities);

а есть нечто подобное еще для Firefox?

Для твоего кейса в хроме должно работать как то так

ChromeOptions options = new ChromeOptions();
options.addArguments("chrome.switches","--disable-extensions");
options.addArguments("chrome.switches","--disable-geolocation");

Ну и опции в драйвер передать