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

  • Автор темы Автор темы semafor
  • Дата начала Дата начала

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Реакции
411
Баллы
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...
 
Последнее редактирование:
  • Оценить
Реакции: LaGir, Konrod_m и ZX
Пля, опять раасеянность! один раз не то прописал, и туплю! Имел ввиду именно это св-во — instance.BrowserType.ToString(); , а написал project.Profile.BrowserProfile. И потом копипастил эту корявую писульку...

@molotok, а вы, батенька, телепат ))
 
Последнее редактирование:
Так как движок и данные профиля не связаны, то понять в каком движке он был создан, можно только по структуре файлов в архиве профиля.
В тасках есть вывод ошибки при загрузке неверного профиля.
Видел в профиле свойство project.Profile.BrowserProfile, но как его юзать что-то не догнал, да к тому же свойство это readonly...
Например так: return project.Profile.BrowserProfile.Navigator.BuildId;
Convert.ToString(instance.BrowserType);
Возвращает название браузера return instance.BrowserType.ToString();
В этом нет разницы.
 
  • Оценить
Реакции: semafor
Пля, опять раасеянность! один раз не то прописал, и туплю! Имел ввиду именно это св-во — instance.BrowserType.ToString(); , а написал project.Profile.BrowserProfile.

Хотя нет, таки имел ввиду именно свойство профиля, а instance.BrowserType, это св-во инстанса. @Zymlex, спасибо за пояснения... А задать настройки браузера профиля кодом выходит не получится?
 
49880

Баг в логике
 
  • Оценить
Реакции: semafor
del
 
Последнее редактирование:
Ага...
Все, допетрил. Вот так должен без глюков работать:

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
Поправил первый пост
 
Подскажите правильно ли я понимаю.

Структура профилей разная. Если я запускаю проект, при старте сгенерировался профиль например фф, а по умолчанию в проекте стоит движок хрома, то этот код автоматом меняет движок на фф и после этого мы сохраняем профиль. Структура его будет под фф так как в момент сохранения был активирован движек фф (не смотря на что что в проекте по умолчанию стоит хром) ?
 
Структура профилей разная. Если я запускаю проект, при старте сгенерировался профиль например фф, а по умолчанию в проекте стоит движок хрома, то этот код автоматом меняет движок на фф и после этого мы сохраняем профиль. Структура его будет под фф так как в момент сохранения был активирован движек фф (не смотря на что что в проекте по умолчанию стоит хром) ?
Данный сниппет делает это на основе User-Agent'а в профиле.
 
Данный сниппет делает это на основе User-Agent'а в профиле.
Блин, краткость — сестра таланта. Я было начал повесть писать в ответ, потом отвлекся, а тут одно предложение и все!
От себя лишь добавлю, что генерить профиль на движке хрома, вставляя в него юзер-агента от фф — имхо, моветон...
 
Блин, краткость — сестра таланта. Я было начал повесть писать в ответ, потом отвлекся, а тут одно предложение и все!
От себя лишь добавлю, что генерить профиль на движке хрома, вставляя в него юзер-агента от фф — имхо, моветон...

я спросил к тому, что у меня два разных шаблона, для работы с хромом и фф, а тут получается, что можно все в один запилить и выбирать движок автоматом сниппетом в зависимости от профиля, ну и сделать можно один шаблон, который будет создавать эти профили и на хроме и фф
 
я спросил к тому, что у меня два разных шаблона, для работы с хромом и фф, а тут получается, что можно все в один запилить и выбирать движок автоматом сниппетом в зависимости от профиля, ну и сделать можно один шаблон, который будет создавать эти профили и на хроме и фф
Заранее предупрежу, в 5.42 или позже, будет добавлена ошибка при загрузке профиля не с тем движком.
Я уточню у разработчиков, как стоит генерировать профиль в таком случае и как пойдёт его привязка.
 
  • Оценить
Реакции: LaGir и Fedor5588
Сниппет действует так — получает значение юзерагента профиля, и если там присутствует фф () — переключает браузер на фф, если в UA указан chrome — текущий браузер переключается на chrome. Я исходил из того, что я генерирую профили для хрома только под движком хрома, для фф только под фф. Если ваш профиль для лисы создан на движке хрома вы получите ошибку
 
  • Оценить
Реакции: Fedor5588
Нужна помощь .Использую прокси микс и сайт выдает от прокси язык допустим попалась прокси Португалии а нужно чтобы он всегда был англ
 
  • Оценить
Реакции: lbvf65
Сниппет действует так — получает значение юзерагента профиля, и если там присутствует фф () — переключает браузер на фф, если в UA указан chrome — текущий браузер переключается на chrome. Я исходил из того, что я генерирую профили для хрома только под движком хрома, для фф только под фф. Если ваш профиль для лисы создан на движке хрома вы получите ошибку
Приветствую, не подскажите как вместо этого можно сгенерировать новый user-agent для профиля или профиль целиком, на случай если я хочу чтобы проект выполнялся только в Chrome браузере?
 
Приветствую, не подскажите как вместо этого можно сгенерировать новый 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);
 
Последнее редактирование:

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