|
| Дата |
|
USD/RUB | 76.8373 | BTC/USD | 28653.5187 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
17.06.2017, 06:16
|
#1
|
Member
Регистрация: 22.09.2015
Сообщений: 37
Бабло: $7280
|
Selenium chromedriver - убрать webrtc
Привет, я не могу догнать, как выключить webrtc в селениуме (хромдрайвер. в смысле, я его юзаю как либу, не как плагин в браузере). Может кто-нибудь знает?
Пробовала так (java):
Код:
capabilities.setCapability("chrome.switches", Arrays.asList(
"--disable-webrtc-multiple-routes", "--disable-webrtc-hw-encoding",
"--disable-webrtc-hw-decoding", "--disable-webrtc-encryption"));
Не работает. Т.е. да, там и нет аргумента типа "--выключить-вебртц", но дело в том, что я вообще больше ничего, связанного с вебртц, не нашла.
Вот, посмотрела код со всеми switches: https://src.chromium.org/viewvc/chro...me_switches.cc
Там этого нет.
Посмотрела код со всеми prefs: https://src.chromium.org/viewvc/chro.../pref_names.cc
Там тоже ничего про вебртц нет. Как его вырубить? Мне не обязательно на джаве, скажите, на чём умеете, я на джаву переведу потом.
|
|
|
17.06.2017, 10:05
|
#2
|
Member
Регистрация: 22.09.2015
Сообщений: 37
Бабло: $7280
ТС -->
|
ТС
Поняла, как сделать. Может кому пригодится.
1. Сначала надо установить в Хроме (в браузере) расширение Get CRX.
2. Надо найти любое расширение, блокирующее webrtc.
3. Теперь если на странице расширения нажать в любом месте правой кнопкой, в контекстном меню будет "Get CRX". Надо нажать на это и сохранить файл .crx (это получится файл расширения, блокирующего webrtc, который потом можно будет использовать в хром драйвере)
4. Теперь надо сказать хром драйверу, чтоб он использовал сохранённый файл (подключил это расширение). Для этого надо из сохранённого .crx файла прочитать байты, закодировать в base64 и отдать хром драйверу:
Код:
Map<String, Object> chromeOptions = new HashMap<String, Object>();
ArrayList<String> ext = new ArrayList<>();
byte[] byteExt = Files.readAllBytes(new File("путь к .crx файлу").toPath());
ext.add(Base64.encode(byteExt));
chromeOptions.put("extensions", ext);
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
WebDriver driver = new ChromeDriver(capabilities);
Для того, чобы закодить в base64, использовалась либа апача (import org.apache.xerces.impl.dv.util.Base64, это в apache commons).
В общем, я не знаю, надо это тут кому-то или нет  Но просмотры вроде есть у темы, оставлю это здесь. Вообще, хотелось бы как-то по-другому вырубить webrtc, потому что таким способом получается, что в плагинах будет какой-нибудь "Webrtcblock", т.е. как бы это уже плохо. Если кто знает, как вырубить его без использования плагинов, это было бы намного лучше.
|
|
|
18.06.2017, 01:39
|
#4
|
главный злодей гофака
Регистрация: 18.06.2007
Сообщений: 5,712
Бабло: $946313
|
Цитата:
Сообщение от missx
расширение Get CRX.
|
можно без crx, просто распакованное расширение и опцию к запуску --load-extension=путь
|
|
|
22.06.2017, 05:34
|
#5
|
Member
Регистрация: 22.09.2015
Сообщений: 37
Бабло: $7280
ТС -->
|
ТС
Цитата:
Сообщение от sspy
Цитата:
Сообщение от missx
расширение Get CRX.
|
можно без crx, просто распакованное расширение и опцию к запуску --load-extension=путь
|
Можно так. Тогда во так будет в коде:
Код:
ChromeOptions options = new ChromeOptions();
options.addArguments("load-extension=/path/to/extension");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
ChromeDriver driver = new ChromeDriver(capabilities);
А у вас получилось выставить таймзону? Ну это ж пиздец какой-то. Я уже везде поискала. Вот, что я нашла:
Код:
chromeOptions.put("args", Arrays.asList("--disable-system-timezone-automatic-detection", "--local-timezone"));
Хуер в систем тайм всё равно показывает время винды.
Где-то откопала странное решение:
Код:
((JavascriptExecutor) driver).executeScript("Date.prototype.getTime = function() { return 1 };");
Тоже нифига не работает. Сработало вот это:
Код:
Runtime.getRuntime().exec("cmd /C time " + "16:56:10");
Это типа всё равно что в командной строке винды выставить время, но конечно для многопоточного проекта это вообще не вариант.
У кого-то получилось таймзону подменить?
Искала расширение, которое как то блокировало бы получение системного времени, не нашла.
Последний раз редактировалось missx; 22.06.2017 в 05:39.
|
|
|
22.06.2017, 12:29
|
#6
|
коплю на феррари
Регистрация: 03.07.2008
Сообщений: 1,251
Бабло: $148195
|
1) качаем https://multiloginapp.com/, ставим, настраиваем Хром, смотрим его плагин, делаем также. Он спуфит нужные данные.
2) идем https://chromium.googlesource.com/ch...nstructions.md , все настраиваем, собираем chromedriver сами
3) серчим гугл по киворду "chrome detect selenium", меняем исходники chromedriver, опять собираем
Профит!
P.S.
против сервисов Гугла не поможет, там еще дальше "наворачивать" надо
|
|
|
22.06.2017, 12:44
|
#7
|
Member
Регистрация: 22.09.2015
Сообщений: 37
Бабло: $7280
ТС -->
|
ТС
Цитата:
Сообщение от sergeospb
1) качаем https://multiloginapp.com/, ставим, настраиваем Хром, смотрим его плагин, делаем также. Он спуфит нужные данные.
2) идем https://chromium.googlesource.com/ch...nstructions.md , все настраиваем, собираем chromedriver сами
3) серчим гугл по киворду "chrome detect selenium", меняем исходники chromedriver, опять собираем
Профит!
P.S.
против сервисов Гугла не поможет, там еще дальше "наворачивать" надо
|
Спасибо, круто. Пока что сложновато для меня, но тоже думала о том, что походу придётся самой собирать хромдрайвер. Даже нашла где-то кусок кода из него, где было вырезано получение таймзоны из винды.
Просто в чём фигня. Всё остальное, кроме таймзоны, пока что (временно, я думаю), меня устраивает. Я нашла расширения, которые блокируют всё, что мне надо, и при этом не определяются как расширения, binary взяла не обычный хром, а браузер на его основе с продвинутой анонимностью, там нет webgl, нет канвас фингерпринта и нет геолокации. При этом джаваскрипт включен. Флэш куки вырубила на компе вообще. Ну и вот, получается, что осталась только одна проблема - таймзона. Ради неё ну не очень хочется собирать хромдрайвер. Т.е. было бы это элементарно для меня - да, конечно. Или было бы у меня много времени - тоже. А так, на изучение много времени уйдёт просто.
Я пока что больше смотрю в сторону инжекта javascript чтоб время подменить, только не работает он что-то, хотя вроде должен. Не понимаю, почему.
Пробовала такой
Код:
var dateYouWant = 1363798981693; Date.prototype.getTime = function() { return dateYouWant; }; console.log( (new Date).getTime() );
И такой
Код:
var d = new Date(2012, 0, 20); Date = undefined; Date = function(){return d;}
Что с ними не так?
Последний раз редактировалось missx; 22.06.2017 в 12:49.
|
|
|
22.06.2017, 22:22
|
#8
|
коплю на феррари
Регистрация: 03.07.2008
Сообщений: 1,251
Бабло: $148195
|
Цитата:
Сообщение от sergeospb
|
Все таки попробуй, что я описал в предыдущем посте. Все, что ты хочешь сделать - пройденный этап для многих. Все уже выдумано и решено (ну или почти все).
|
|
|
22.06.2017, 23:04
|
#9
|
Member
Регистрация: 22.09.2015
Сообщений: 37
Бабло: $7280
ТС -->
|
ТС
Цитата:
Сообщение от sergeospb
Цитата:
Сообщение от sergeospb
|
Все таки попробуй, что я описал в предыдущем посте. Все, что ты хочешь сделать - пройденный этап для многих. Все уже выдумано и решено (ну или почти все).
|
Ок, я что-то после твоего поста задумалась, что мне это только кажется сложным  Надо попробовать.
|
|
|
24.06.2017, 13:25
|
#10
|
Юниор
Регистрация: 16.09.2011
Сообщений: 2
Бабло: $1360
|
А как тоже самое сделать для фаерфокса?
Я имею ввиду подменить системное время
|
|
|
Опции темы |
|
Опции просмотра |
Линейный вид
|
|