Сниппет автоматического переключения браузера проекта в зависимости от UserAgent профиля

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Доброго дня!
Я сам по себе человек достаточно рассеянный, так помимо этого, по квартире постоянно носятся два малолетних берсерка, постоянно отвлекая на свои подвиги. И приводит это к постоянным закидонам при написании шаблонов. Пишешь регер — анонимный-анонимный, с эмуляцией всего чего можно — ввода с клавы, кликов мышкой, и всего такого. Наклепаешь профилей (отдельное спасибо @LaGir за статью по теме), начинаешь регать — ошибки регистрации. Лезешь в анонимность — все эти whoer-ы, fakevision ковыряешь, мозг набекрень, а результата 0, а потом оказывается, что ты или браузер при регистрации не переключил в настройках проекта, или наоборот, в профиле не тот браузер для генерации выбрал...
В итоге, заходит твой бот на какой-нибудь условный майлру, с нагуляными куками, эмуляциями и всем прочим, и пытается регаться из под 32-лисички с юзерагентом хрома. И естественно, такого умника отправляют гадать каптчи-перекаптчи, принимать звонки и вообще, унижают по всякому.

Пришла идея как-то автоматизировать соответствие UA и браузера. Но методов на шарпе много, а опыта мало, потому спросил на форуме о возможности.
Благодаря ответу @Zymlex вот тут, получился сниппет автопереключения браузера проекта в зависимости от UserAgent профиля. Тестил на ZP и PM 5.40. Zymlex предупреждал, что по хрому может закосячить, но нет, вроде переключает без ошибок:

C#:
//получаем useragent профиля
string ua = project.Profile.UserAgent;
//получаем текущий браузер проекта
var currBrowser = Convert.ToString(instance.BrowserType);

project.SendInfoToLog("Profile UserAgent: "+ua+" Current project browser: "+currBrowser, true);

//Если в ua присутствует Chrome и текущий браузер не Chrome
if (ua.Contains("Chrome") && (currBrowser != "Chrome"))
{
    //устанавливаем браузером проекта Chrome
    instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Chrome, true);
    project.SendInfoToLog("Движок Chrome установлен как браузер проекта", true);
}

//Если в ua присутствует Firefox любой версии 4*, и движок не Firefox45,
if (ua.Contains("Firefox/4") && (currBrowser != "Firefox45"))
{
    //устанавливаем браузером проекта Firefox45
    instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Firefox45, true);
    project.SendInfoToLog("Движок Firefox45 установлен как браузер проекта", true);
}

//Если в ua присутствует Firefox любой версии 5*, 6*, 7*,
if (ua.Contains("Firefox/5") || ua.Contains("Firefox/6") || ua.Contains("Firefox/7"))
{
    //и движок не Firefox52х64
    if (ua.Contains("Win64") && currBrowser != "Firefox52x64")
    {
        //устанавливаем браузером проекта Firefox52x64
        instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Firefox52x64, true);
        project.SendInfoToLog("Движок Firefox52x64 установлен как браузер проекта", true);
    }
    //и движок не Firefox52
    if (ua.Contains("WOW64") && currBrowser != "Firefox52")
    {
        //устанавливаем браузером проекта Firefox52
        instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Firefox52, true);
        project.SendInfoToLog("Движок Firefox52 установлен как браузер проекта", true);  
    }
    
    // UA FF/5*-/6*-/7*, и не содержит Win64, и не содержит WOW64, и движок не Firefox52
    if (ua.Contains("WOW64")==false && ua.Contains("Win64")==false && currBrowser != "Firefox52")
    {
        //устанавливаем браузером проекта Firefox52
        instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Firefox52, true);
        project.SendInfoToLog("Движок Firefox52 установлен как браузер проекта", true);  
    }
}
Остался не отвеченным вопрос о получении в код настроек браузера профиля (см. скрин), чтобы можно было контролировать генерацию профиля:

49872

Видел в профиле свойство project.Profile.BrowserProfile, но как его юзать что-то не догнал, да к тому же свойство это readonly...
 
Последнее редактирование:

molotok

Client
Регистрация
17.04.2015
Сообщения
733
Благодарностей
358
Баллы
63
Возвращает название браузера return instance.BrowserType.ToString();
 
  • Спасибо
Реакции: semafor

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Пля, опять раасеянность! один раз не то прописал, и туплю! Имел ввиду именно это св-во — instance.BrowserType.ToString(); , а написал project.Profile.BrowserProfile. И потом копипастил эту корявую писульку...

@molotok, а вы, батенька, телепат ))
 
Последнее редактирование:

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
Так как движок и данные профиля не связаны, то понять в каком движке он был создан, можно только по структуре файлов в архиве профиля.
В тасках есть вывод ошибки при загрузке неверного профиля.
Видел в профиле свойство project.Profile.BrowserProfile, но как его юзать что-то не догнал, да к тому же свойство это readonly...
Например так: return project.Profile.BrowserProfile.Navigator.BuildId;
Convert.ToString(instance.BrowserType);
Возвращает название браузера return instance.BrowserType.ToString();
В этом нет разницы.
 
  • Спасибо
Реакции: semafor

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Пля, опять раасеянность! один раз не то прописал, и туплю! Имел ввиду именно это св-во — instance.BrowserType.ToString(); , а написал project.Profile.BrowserProfile.
Хотя нет, таки имел ввиду именно свойство профиля, а instance.BrowserType, это св-во инстанса. @Zymlex, спасибо за пояснения... А задать настройки браузера профиля кодом выходит не получится?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63

NNzet

Client
Регистрация
26.01.2014
Сообщения
114
Благодарностей
29
Баллы
28
49880

Баг в логике
 
  • Спасибо
Реакции: semafor

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
del
 
Последнее редактирование:

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Ага...
Все, допетрил. Вот так должен без глюков работать:

C#:
//получаем useragent профиля
string ua = project.Profile.UserAgent;
//получаем текущий браузер проекта
var currBrowser = Convert.ToString(instance.BrowserType);

project.SendInfoToLog("Profile UserAgent: "+ua+" Current project browser: "+currBrowser, true);

//Если в ua присутствует Chrome и текущий браузер не Chrome
if (ua.Contains("Chrome") && (currBrowser != "Chrome"))
{
    //устанавливаем браузером проекта Chrome
    instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Chrome, true);
    project.SendInfoToLog("Движок Chrome установлен как браузер проекта", true);
}

//Если в ua присутствует Firefox любой версии 4*, и движок не Firefox45,
if (ua.Contains("Firefox/4") && (currBrowser != "Firefox45"))
{
    //устанавливаем браузером проекта Firefox45
    instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Firefox45, true);
    project.SendInfoToLog("Движок Firefox45 установлен как браузер проекта", true);
}

//Если в ua присутствует Firefox любой версии 5*, 6*, 7*,
if (ua.Contains("Firefox/5") || ua.Contains("Firefox/6") || ua.Contains("Firefox/7"))
{
    //и движок не Firefox52х64
    if (ua.Contains("Win64") && currBrowser != "Firefox52x64")
    {
        //устанавливаем браузером проекта Firefox52x64
        instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Firefox52x64, true);
        project.SendInfoToLog("Движок Firefox52x64 установлен как браузер проекта", true);
    }
    //и движок не Firefox52
    if (ua.Contains("WOW64") && currBrowser != "Firefox52")
    {
        //устанавливаем браузером проекта Firefox52
        instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Firefox52, true);
        project.SendInfoToLog("Движок Firefox52 установлен как браузер проекта", true);
    }
 
////------------------- Вот тут косячил с безуcловным else --------------

    // UA FF/5*-/6*-/7*, и не содержит Win64, и не содержит WOW64, и движок не Firefox52 (для UA вида Mozilla/5.0 (Windows NT 6.3; rv:55.0) Gecko/20100101 Firefox/55.04)
    if (ua.Contains("WOW64")==false && ua.Contains("Win64")==false && currBrowser != "Firefox52")
    {
        //устанавливаем браузером проекта Firefox52
        instance.Launch(ZennoLab.InterfacesLibrary.Enums.Browser.BrowserType.Firefox52, true);
        project.SendInfoToLog("Движок Firefox52 установлен как браузер проекта", true);
    }
}
 
Последнее редактирование:
  • Спасибо
Реакции: phoenixs и Rimen

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Поправил первый пост
 

Fedor5588

Client
Регистрация
04.06.2017
Сообщения
313
Благодарностей
73
Баллы
28
Подскажите правильно ли я понимаю.

Структура профилей разная. Если я запускаю проект, при старте сгенерировался профиль например фф, а по умолчанию в проекте стоит движок хрома, то этот код автоматом меняет движок на фф и после этого мы сохраняем профиль. Структура его будет под фф так как в момент сохранения был активирован движек фф (не смотря на что что в проекте по умолчанию стоит хром) ?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
Структура профилей разная. Если я запускаю проект, при старте сгенерировался профиль например фф, а по умолчанию в проекте стоит движок хрома, то этот код автоматом меняет движок на фф и после этого мы сохраняем профиль. Структура его будет под фф так как в момент сохранения был активирован движек фф (не смотря на что что в проекте по умолчанию стоит хром) ?
Данный сниппет делает это на основе User-Agent'а в профиле.
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Данный сниппет делает это на основе User-Agent'а в профиле.
Блин, краткость — сестра таланта. Я было начал повесть писать в ответ, потом отвлекся, а тут одно предложение и все!
От себя лишь добавлю, что генерить профиль на движке хрома, вставляя в него юзер-агента от фф — имхо, моветон...
 

Fedor5588

Client
Регистрация
04.06.2017
Сообщения
313
Благодарностей
73
Баллы
28
Блин, краткость — сестра таланта. Я было начал повесть писать в ответ, потом отвлекся, а тут одно предложение и все!
От себя лишь добавлю, что генерить профиль на движке хрома, вставляя в него юзер-агента от фф — имхо, моветон...
я спросил к тому, что у меня два разных шаблона, для работы с хромом и фф, а тут получается, что можно все в один запилить и выбирать движок автоматом сниппетом в зависимости от профиля, ну и сделать можно один шаблон, который будет создавать эти профили и на хроме и фф
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
я спросил к тому, что у меня два разных шаблона, для работы с хромом и фф, а тут получается, что можно все в один запилить и выбирать движок автоматом сниппетом в зависимости от профиля, ну и сделать можно один шаблон, который будет создавать эти профили и на хроме и фф
Заранее предупрежу, в 5.42 или позже, будет добавлена ошибка при загрузке профиля не с тем движком.
Я уточню у разработчиков, как стоит генерировать профиль в таком случае и как пойдёт его привязка.
 
  • Спасибо
Реакции: LaGir и Fedor5588

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Сниппет действует так — получает значение юзерагента профиля, и если там присутствует фф () — переключает браузер на фф, если в UA указан chrome — текущий браузер переключается на chrome. Я исходил из того, что я генерирую профили для хрома только под движком хрома, для фф только под фф. Если ваш профиль для лисы создан на движке хрома вы получите ошибку
 
  • Спасибо
Реакции: Fedor5588

Ostap1992

Client
Регистрация
26.02.2020
Сообщения
44
Благодарностей
5
Баллы
8
Нужна помощь .Использую прокси микс и сайт выдает от прокси язык допустим попалась прокси Португалии а нужно чтобы он всегда был англ
 
  • Спасибо
Реакции: lbvf65

Quant

Client
Регистрация
13.12.2016
Сообщения
24
Благодарностей
2
Баллы
3
Сниппет действует так — получает значение юзерагента профиля, и если там присутствует фф () — переключает браузер на фф, если в UA указан chrome — текущий браузер переключается на chrome. Я исходил из того, что я генерирую профили для хрома только под движком хрома, для фф только под фф. Если ваш профиль для лисы создан на движке хрома вы получите ошибку
Приветствую, не подскажите как вместо этого можно сгенерировать новый user-agent для профиля или профиль целиком, на случай если я хочу чтобы проект выполнялся только в Chrome браузере?
 

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
404
Баллы
63
Приветствую, не подскажите как вместо этого можно сгенерировать новый user-agent для профиля или профиль целиком, на случай если я хочу чтобы проект выполнялся только в Chrome браузере?
Профиль (и юзерагент(юа) соответственно) генерируется при запуске проекта. Поэтому, если в процессе работы шаблона вам нужно менять юа, то его нужно генерировать самому (Сам никогда именно генерацией юзерагаентов не занимался — у меня есть где взять список ua). Пара вариантов действия:
1. Нагенерить профилей, и в шаблоне, в нужном месте загружать их (пример: https://zennolab.com/discussion/threads/profili-osobennosti-generacii-proverki-zagruzki.59820/)
2. Собрать список актуальных юа под нужную ось и браузер (например на одном из своих сайтов, ну или где-то еще), в проекте получать строку из списка и устанавливать значение строки в поле useragent. Типа такого:
C#:
var ualist = project.Lists["ua"];
project.Profile.UserAgent = ualist.ElementAt(0);
 
Последнее редактирование:

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)