Вопросы-ответы
Общие вопросы

В программе есть подробное описание практически каждой настройки. Наведите курсор на интересующий вас элемент интерфейса - появится подсказка с его описанием.
Это актуально и для списка почтовых сервисов - выберите сервис, наведите курсор - увидите его особенности.
Как настроить программу для наилучшего результата? Очевидно, что универсального ответа нет - зависит от вашего железа, скорости интернета, качества проксей, типа проксей, выбранного почтового сервиса и индивидуальных потребностей. Отталкивайтесь от дефолтных настроек и экспериментируйте.

Обычный - эмулируется регистрация через браузер. Повторяются основные запросы, парсятся результаты, на основании данных отправляются последующие запросы. Наивысшая скорость регистрации, среднее качество.
Мобильный - тот же принцип, что у обычной регистрации, но в этом случае идет эмуляция регистрации через официальные мобильные приложения (android, ios). Добавлено, как альтернативный способ регистрации.
Браузер - регистрация идет через реальный браузер (Chrome, Firefox). Повышенное потребление ресурсов, долгое время регистрации, но лучшее качество почтовых ящиков.

Вероятно, вы используете ломаную программу. Большинство ломаных версии данной программы, которые встречались, были заражены. Плюс, с нашей стороны будет делаться все возможное, чтоб ломаный софт работал некорректно, глючно, или не работал вовсе.

Ничего конкретного порекомендовать не можем, покупка проксей - прерогатива пользователя программы.
Прокси IPv6 к покупке НЕ рекомендуются, т.к. через них практически ничего не регистрируется.
Для тех, кому лень гуглить, небольшая подборка продавцов:

Очень старый магазин, большое кол-во разных аккаунтов, много способов оплаты: buyaccs.com.

Регистратор работает со стандартными настройками CapMonster. После смены настроек не забудьте перезапустить КапМонстр, а перед использованием в регистраторе выбрать его в качестве сервиса антикапчи.
Если CapMonster запущен на удаленном компьютере, нужно указать его адрес в поле "Адрес CapMonster" (пример: http://192.168.1.5:80).
Иногда это требуется и при работе Капмонстра на локальном компьютере.
Узнать больше про CapMonster, попробовать демо-версию и купить его, вы можете по ссылке: https://zennolab.com/ru/products/capmonster/.

При работе регистратора и XEvil на одном компьютере, в настройках регистратора достаточно указать CapMonster, как сервис антикапчи.
Если XEvil запущен на удаленном компьютере, в настройках XEvil нужно указать внешний ip и свободный порт (пример: http://192.168.1.5:80), и его же указать в настройках регистратора, в поле "Адрес CapMonster".
Узнать больше про XEvil, попробовать демо-версию и купить его, вы можете по ссылке: botmasterru.com.

По собственному опыту: на первом месте - rucaptcha.com, на втором - anti-captcha.com.
Эти сервисы поддерживают разгадывание reCaptcha2, reCaptcha3, hCaptcha, FunCaptcha.

На основании личного опыта работы с этими сервисами..
sms-activate.ru. Хорошие цены. Опыта общения с ТП нет, т.к. все работало без проблем. Есть https-зеркало. Рекомендуется.
onlinesim.ru. Не самые низкие цены. Техподдержка не отвечает в установленные ими же сроки, но все же терпимо. Есть https-зеркало. При запросе российских номеров требуется отправка скана паспорта. Неплохой сервис.
sms-area.org. Вероятно, самые высокие цены (иногда в разы выше, чем у других сервисов). ТП отвечает долго. Нет https-зеркала сайта. Ощущение, что сервис умер.
simsms.org и smspva.com. Невысокие цены. Повторное смс, высланное на уже оплаченный вами номер - платное. Кривое апи, которое не возвращает часть параметров и иногда расходится с инструкцией. Нет https-зеркала сайта. Система рейтинга пользователей в связке с некачественными номерами (для некоторых сервисов) быстро вгонят вас в блок. Запрос на вывод денег длится месяц (по личному опыту даже дольше месяца). Не рекомендуется к использованию.
smsvk.net. Невысокие цены. Кривой неудобный сайт. Сообщения отправленные через сайт игнорятся, лучше сразу пишите в скайп. В наличии очень мало телефонных номеров. Нет https-зеркала сайта. Не рекомендуется к использованию.
5sim.net. Много сервисов и стран, адекватные цены, много телефонов. Отсутствует защита клиентского баланса (например доступ по ip), в связи с чем ваш баланс может быть обнулен брутфорсером ключей (что и произошло в моем случае). Общение с поддержкой оставляет исключительно негативный осадок: ТП игнорирует вопросы, закрывает тикеты, «включает дурака», и делает все, чтоб не понять вашего вопроса. В целом, сервис неплохой. Но по причине недружелюбной ТП, нерешенной проблемы с обнуленным балансом, и отсутствия нормальной партнерки, приложение не будет работать с этим сервисом.
smska.xyz. Крайне не рекомендуется к использованию. В наличии очень мало телефонных номеров. Нет возможности вывода или траты заработанных в реферальной программе денег. Техподдержка не отвечает ни по одному каналу связи.
sms-acktiwator.ru. Крайне не рекомендуется к использованию. Спустя 1-2 года, владелец без предупреждения удалил мой аккаунт, в переписке отрицал существование моего аккаунта. После предоставления мной доказательств (письмо о регистрации с его домена), вообще перестал отвечать на сообщения. Приложение не будет работать с этим сервисом, т.к. владелец мошенник.

Некоторые почтовые сервисы очень дотошно относятся к регистрируемым почтовым ящикам, при любых подозрениях могут их блокировать. Причиной могут быть как большое кол-во регистраций почт с одного ip (даже приватного), так и публичные заюзанные прокси.
Покупая качественные прокси из проверенных источников и "не высасывая" каждый прокси до последнего, вы снизите риск блокировки почтовых ящиков.
Также не стоит заходить в созданный ящик из страны, отличающейся от страны регистрации (если зарегали через китайский прокси, то и проверяйте/заходите в эту почту с китайских прокси).

Несмотря на то, что программа поддерживает оба типа проксей, через IPv6 регистрирует только Yandex. Это особенность самих почтовых сервисов.

Программа поддерживает многопоточную регистрацию через Тор. Но нужно учитывать, что каждый поток - это запуск отдельного процесса Tor, соответственно повышенная нагрузка на систему. Рекомендуется не ставить много потоков.
Результат работы через Тор может быть слабый или вообще отсутствовать, по причине большого кол-ва пользователей и специфики работы технологии.

Если Tor заблокирован в вашей стране и подключиться напрямую не удается, необходимо использовать узлы-посредники, называемые мостами.
Получение моста с помощью Telegram-бота:
  • подключитесь к @GetBridgesBot в Telegram
  • наберите /bridges
  • скопируйте одну из полученных строк
Получение моста с сайта Tor Project:
Получение моста по email (только для Gmail и Riseup):
  • отправьте письмо по адресу bridges@torproject.org с почтового аккаунта Gmail или Riseup
  • оставьте поле темы пустым, а в теле сообщения напишите «get transport obfs4»
  • скопируйте одну из полученных строк

Выберите режим работы «Список файлов/ссылок проксей». Откройте список, и укажите один или несколько прокси, добавив у каждого в квадратных скобках ссылку на реконнект.
Пример: 192.168.1.8:6021[reconnect:http://192.168.1.8/reconnect.php]
Установите «Таймаут обновления» 10 сек., и выключите разблокированную настройку «Остановка при отсутствии прокси».
Включите настройки блокировки забаненных проксей, и их вывод из под блокировки через минуту. При необходимости, настройте другие параметры блокировки по условиям.
Включите все настройки в разделе «Мобильные прокси», они позволят выполнять переподключение перед выводом проксей из списков заблокированных/мертвых.

Программа поддерживает установку своих User-Agents. Но нужно учитывать, что сервисы могут выдавать разный html-код для разных юзер-агентов, что приведет к отрицательному результату. Поэтому рекомендуется оставлять эту настройку по умолчанию, или действовать исходя из этой особенности сервисов.

Запустите программу в режиме отладки. Сделайте несколько попыток регистраций, и нажмите «Диагностика» (в настройках, на месте кнопки отладки). Пришлите на почту сформировавшийся архив.
Раздел «Задания»

Проект состоит из двух файлов, "Program.cs" - с кодом проекта, и "TaskProject.csproj" - для открытия его в Visual Studio.
В шапке файла закомментированы системные xml-теги, содержащие мета-данные и необходимые для правильной работы.
  • name - название проекта.
  • version - версия проекта.
  • description - описание проекта.
  • references - ссылки на сторонние dll.
Запуск проекта
В регистраторе, разделе "Задания", выберите свой файл "Program.cs".
Запуск среды разработки
В регистраторе, разделе "Задания", экспортируйте проект в новую папку и запустите файл "TaskProject.csproj" (в Visual Studio). Это минимальный проект, на основании которого можно делать свой.
Если у вас есть dll, которую нужно добавить в проект:
  • добавьте ссылку на нее в Visual Studio.
  • в блоке <references> укажите имя файла или полный путь (каждая dll с новой строки).
  • скопируйте dll в папку проекта или в "%appdata%\Staf4 Registrator\Assemblies\" (если выше указывали полный путь, копировать файл не нужно).
Объявленные переменные
Строка данных, получаемая, в случае выбора способа работы "Данные из файла":
public string data = null;
Объект настроек, доступные ключи:
  • AnticaptchaAttemptsEnterCaptcha - кол-во попыток ввода капчи.
  • DataDir - папка данных программы.
  • TempDir - папка временных файлов программы (капчи).
  • ResultsDir - папка результатов работы программы.
  • ProjectDir - папка текущего проекта.
public Dictionary<string, string> settings;
Объект текущего прокси (тип, ip, порт, логин...):
public Staf4.Proxy proxy;
Объект текущего профиля пользователя (email, логин, пароль, ФИО...):
public Staf4.Profile profile;
Объект работы с сервисом антикапчи:
public Staf4.NsAnticaptcha.Anticaptcha anticaptcha;
Объект работы с смс-сервисом:
public Staf4.NsSms.Sms sms;
Объект выполнения http-запросов:
public Staf4.NsCurl.ICurl http;
Объект работы с браузером (через Selenium):
public Staf4.SeleniumJs browser;
Объект результата работы скрипта:
  • bool Success - результат выполнения скрипта (true - успех, false - ошибка).
  • string Data - данные, возвращаемые программе, в случае успешного выполнения скрипта.
  • string Error - текст ошибки, в случае неуспешного выполнения скрипта.
  • Log(string) - вывод строки в лог.
public Staf4.TaskResult result;

Отображение диалога с входными данными, текущим прокси и профилем пользователя:
MessageBox.Show(String.Format("Data: {0}\r\n\r\nProxy: {1}\r\n\r\nProfile: {2}", data, proxy, profile));

Запрос баланса:
AnticaptchaGetBalanceResult acBalance = anticaptcha.GetBalance();
MessageBox.Show(String.Format("Result: {0}\r\nText: {1} {2}", acBalance.Result, acBalance.ResultExt, anticaptcha.Currency));
Разгадывание капчи-картинки (+ пример реализации ввода капчи несколько попыток):
string urlCaptcha = "https://debug.registrator.pl/captcha/";
CurlResult respCapImg1 = http.Get(urlCaptcha);
string matchImg = ParseSt.PregMatchSingle(respCapImg1.Data, "<img id=\"image\" src=\"([^\"]+)\"");
int captchaEnterCnt = 0;
CAPTCHA:
captchaEnterCnt++;
string captchaFilePath1 = GetTempFileName("png", "captcha");
respCapImg1 = http.SaveFile("https://debug.registrator.pl/captcha/" + matchImg, "", "", "", captchaFilePath1);
if (respCapImg1.CodeInt == 404) { result.Error = "error_captcha_down"; return; }
AnticaptchaRecognizeResult captchaRecognizedImg1 = anticaptcha.Recognize(captchaFilePath1);
if (captchaRecognizedImg1.Result != AnticaptchaResultEnum.ok_rec)
{
	if (captchaEnterCnt < ConverterSt.String2int32(settings["AnticaptchaAttemptsEnterCaptcha"])) { goto CAPTCHA; }
	result.Error = "error_anticaptcha"; return;
}
http.PostAddDataString("captcha=" + captchaRecognizedImg1.ResultExt, "application/x-www-form-urlencoded");
respCapImg1 = http.Get(urlCaptcha);
string matchResultCapImg1 = ParseSt.PregMatchSingle(respCapImg1.Data, "<span id=\"result\">(.*?)</span>");
if (matchResultCapImg1 == "wrong")
{
	if (captchaEnterCnt < ConverterSt.String2int32(settings["AnticaptchaAttemptsEnterCaptcha"])) { goto CAPTCHA; }
}
switch (matchResultCapImg1)
{
	case "ok": result.Success = true; break;
	case "wrong": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}
Разгадывание reCaptcha2:
AnticaptchaRecognizeResult captchaRecognizedRc21 = anticaptcha.RecognizeRecaptcha2("6LefM7kjAAAAAGxc8ujU0Udr_2LrmzGbp3tf93jV", "https://debug.registrator.pl/", false, false);
if (captchaRecognizedRc21.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
http.PostAddDataString("g-recaptcha-response=" + captchaRecognizedRc21.ResultExt, "application/x-www-form-urlencoded");
CurlResult respCapRc21 = http.Get("https://debug.registrator.pl/recaptcha2/");
string matchResultCapRc21 = ParseSt.PregMatchSingle(respCapRc21.Data, "<span id=\"result\">(.*?)</span>");
switch (matchResultCapRc21)
{
	case "ok": result.Success = true; break;
	case "error": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}
Разгадывание reCaptcha3:
AnticaptchaRecognizeResult captchaRecognizedRc31 = anticaptcha.RecognizeRecaptcha3("6LeiM7kjAAAAAPV38BbKfNlFSfwYRRjE8Y32WgBb", "https://debug.registrator.pl/", "actionName", "0.3", false);
if (captchaRecognizedRc31.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
http.PostAddDataString("g-recaptcha-response=" + captchaRecognizedRc31.ResultExt, "application/x-www-form-urlencoded");
CurlResult respCapRc31 = http.Get("https://debug.registrator.pl/recaptcha3/");
string matchResultCapRc31 = ParseSt.PregMatchSingle(respCapRc31.Data, "<span id=\"result\">(.*?)</span>");
switch (matchResultCapRc31)
{
	case "ok": result.Success = true; break;
	case "error": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}
Разгадывание hCaptcha:
AnticaptchaRecognizeResult captchaRecognizedHc1 = anticaptcha.RecognizeHCaptcha("41079ab2-62e6-42cb-8177-0e290214ae92", "https://debug.registrator.pl/");
if (captchaRecognizedHc1.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
http.PostAddDataString("h-captcha-response=" + captchaRecognizedHc1.ResultExt, "application/x-www-form-urlencoded");
CurlResult respCapHc1 = http.Get("https://debug.registrator.pl/hcaptcha/");
string matchResultCapHc1 = ParseSt.PregMatchSingle(respCapHc1.Data, "<span id=\"result\">(.*?)</span>");
switch (matchResultCapHc1)
{
	case "ok": result.Success = true; break;
	case "error": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}
Разгадывание Turnstile:
AnticaptchaRecognizeResult captchaRecognizedTr1 = anticaptcha.RecognizeTurnstile("0x4AAAAAAAB5SzQ_eELDE-99", "https://debug.registrator.pl/");
if (captchaRecognizedTr1.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
http.PostAddDataString("h-captcha-response=" + captchaRecognizedTr1.ResultExt, "application/x-www-form-urlencoded");
CurlResult respCapTr1 = http.Get("https://debug.registrator.pl/turnstile/");
string matchResultCapTr1 = ParseSt.PregMatchSingle(respCapTr1.Data, "<span id=\"result\">(.*?)</span>");
switch (matchResultCapTr1)
{
	case "ok": result.Success = true; break;
	case "error": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}
Разгадывание YandexSmartCaptcha:
AnticaptchaRecognizeResult captchaRecognizedYc1 = anticaptcha.RecognizeYandexSmartCaptcha("fxBXzFpewqTQccxRvug1hlaySSqgP2BCF8nKnzc5", "https://debug.registrator.pl/");
if (captchaRecognizedYc1.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
http.PostAddDataString("h-captcha-response=" + captchaRecognizedYc1.ResultExt, "application/x-www-form-urlencoded");
CurlResult respCapYc1 = http.Get("https://debug.registrator.pl/yasmartcaptcha/");
string matchResultCapYc1 = ParseSt.PregMatchSingle(respCapYc1.Data, "<span id=\"result\">(.*?)</span>");
switch (matchResultCapYc1)
{
	case "ok": result.Success = true; break;
	case "error": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}

Разгадывание капчи-картинки:
if (!browser.ServerStart()) { result.Error = "browser_start_error"; return; }
string captchaFilePath2 = GetTempFileName("jpg", "captcha");
browser.ProxyServer.ResponseEvent += async delegate (Titanium.Web.Proxy.EventArguments.SessionEventArgs __e)
{
	if (ParseSt.PregMatchBool(__e.HttpClient.Request.Url, "/captcha/([0-9]+)\.png"))
	{
		byte[] body = await __e.GetResponseBody();
		File.WriteAllBytes(captchaFilePath2, body);
	}
	return __e;
};
browser.PageOpen("https://debug.registrator.pl/captcha/");
AnticaptchaRecognizeResult captchaRecognizedImg2 = anticaptcha.Recognize(captchaFilePath2);
if (captchaRecognizedImg2.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
browser.TextInElement(By.CssSelector("input[name=captcha]"), captchaRecognizedImg2.ResultExt);
browser.ClickOnElement(By.Id("submit"));
browser.LoadingFrameWait(500);
string matchResultCapImg2 = ParseSt.PregMatchSingle(browser.GetPageContent(), "<span id=\"result\">(.*?)</span>");
switch (matchResultCapImg2)
{
	case "ok": result.Success = true; break;
	case "wrong": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}
Разгадывание reCaptcha2:
if (!browser.ServerStart()) { result.Error = "browser_start_error"; return; }
browser.RecaptchaReplace(true);
browser.PageOpen("https://debug.registrator.pl/recaptcha2/");
AnticaptchaRecognizeResult captchaRecognizedRc22 = anticaptcha.RecognizeRecaptcha2("6LefM7kjAAAAAGxc8ujU0Udr_2LrmzGbp3tf93jV", "https://debug.registrator.pl/", false, false);
if (captchaRecognizedRc22.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
browser.JsExec("window.grecaptcha.setResponse(\"" + captchaRecognizedRc22.ResultExt + "\");");
browser.ClickOnElement(By.Id("submit"));
browser.LoadingFrameWait(500);
string matchResultCapRc22 = ParseSt.PregMatchSingle(browser.GetPageContent(), "<span id=\"result\">(.*?)</span>");
switch (matchResultCapRc22)
{
	case "ok": result.Success = true; break;
	case "error": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}
Разгадывание reCaptcha3:
if (!browser.ServerStart()) { result.Error = "browser_start_error"; return; }
browser.RecaptchaReplace(true);
browser.PageOpen("https://debug.registrator.pl/recaptcha3/");
AnticaptchaRecognizeResult captchaRecognizedRc32 = anticaptcha.RecognizeRecaptcha3("6LeiM7kjAAAAAPV38BbKfNlFSfwYRRjE8Y32WgBb", "https://debug.registrator.pl/", "actionName", "0.3", false);
if (captchaRecognizedRc32.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
browser.JsExec("window.grecaptcha.setResponseExecute(\"" + captchaRecognizedRc32.ResultExt + "\");");
browser.ClickOnElement(By.Id("submit"));
browser.LoadingFrameWait(500);
string matchResultCapRc32 = ParseSt.PregMatchSingle(browser.GetPageContent(), "<span id=\"result\">(.*?)</span>");
switch (matchResultCapRc32)
{
	case "ok": result.Success = true; break;
	case "error": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}
Разгадывание hCaptcha:
if (!browser.ServerStart()) { result.Error = "browser_start_error"; return; }
browser.HcaptchaReplace(true);
browser.PageOpen("https://debug.registrator.pl/hcaptcha/");
AnticaptchaRecognizeResult captchaRecognizedHc2 = anticaptcha.RecognizeHCaptcha("41079ab2-62e6-42cb-8177-0e290214ae92", "https://debug.registrator.pl/");
if (captchaRecognizedHc2.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
browser.JsExec("window.hcaptcha.setResponse(\"" + captchaRecognizedHc2.ResultExt + "\");");
browser.ClickOnElement(By.Id("submit"));
browser.LoadingFrameWait(500);
string matchResultCapHc2 = ParseSt.PregMatchSingle(browser.GetPageContent(), "<span id=\"result\">(.*?)</span>");
switch (matchResultCapHc2)
{
	case "ok": result.Success = true; break;
	case "error": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}
Разгадывание Turnstile:
if (!browser.ServerStart()) { result.Error = "browser_start_error"; return; }
browser.TurnstileReplace(true);
browser.PageOpen("https://debug.registrator.pl/turnstile/");
AnticaptchaRecognizeResult captchaRecognizedTr2 = anticaptcha.RecognizeTurnstile("0x4AAAAAAAB5SzQ_eELDE-99", "https://debug.registrator.pl/");
if (captchaRecognizedTr2.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
browser.JsExec("window.turnstile.setResponse(\"" + captchaRecognizedTr2.ResultExt + "\");");
browser.ClickOnElement(By.Id("submit"));
browser.LoadingFrameWait(500);
string matchResultCapTr2 = ParseSt.PregMatchSingle(browser.GetPageContent(), "<span id=\"result\">(.*?)</span>");
switch (matchResultCapTr2)
{
	case "ok": result.Success = true; break;
	case "error": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}
Разгадывание YandexSmartCaptcha:
if (!browser.ServerStart()) { result.Error = "browser_start_error"; return; }
browser.YandexSmartCaptchaReplace(true);
browser.PageOpen("https://debug.registrator.pl/yasmartcaptcha/");
AnticaptchaRecognizeResult captchaRecognizedYc2 = anticaptcha.RecognizeYandexSmartCaptcha("fxBXzFpewqTQccxRvug1hlaySSqgP2BCF8nKnzc5", "https://debug.registrator.pl/");
if (captchaRecognizedYc2.Result != AnticaptchaResultEnum.ok_rec) { result.Error = "error_anticaptcha"; return; }
browser.JsExec("window.smartCaptcha.setResponse(\"" + captchaRecognizedYc2.ResultExt + "\");");
browser.ClickOnElement(By.Id("submit"));
browser.LoadingFrameWait(500);
string matchResultCapYc2 = ParseSt.PregMatchSingle(browser.GetPageContent(), "<span id=\"result\">(.*?)</span>");
switch (matchResultCapYc2)
{
	case "ok": result.Success = true; break;
	case "error": result.Error = "error_captcha_wrong"; break;
	default: result.Error = "error_unknown_reason"; break;
}

Запрос баланса:
SmsSharedResult smsBalance = sms.GetBalance();
MessageBox.Show(String.Format("Result: {0}\r\nText: {1} {2}", smsBalance.Result, smsBalance.ResultExt, sms.Currency));
Запрос телефона и смс:
sms.Service = SmsServiceEnum.MailRu;
SmsGetPhoneResult smsPhone = sms.GetPhone();
if (smsPhone.Result == SmsResultEnum.ok)
{
	SmsSharedResult smsSms = sms.GetSms();
	MessageBox.Show(String.Format("SMS-Service: {0}\r\nService: {1}\r\n\r\nPhone: {2}\r\n\r\nSms: {3}", sms.ServiceName, sms.Service, smsPhone, smsSms));
}
else
{
	MessageBox.Show(String.Format("SMS-Service: {0}\r\nService: {1}\r\n\r\nPhone: {2}", sms.ServiceName, sms.Service, smsPhone));
}

Get-запрос:
CurlResult resp1 = http.Get("https://chek.zennolab.com/proxy.php");
MessageBox.Show(resp1.Data);
Post-запрос + установка cookie:
http.CookieAdd("param1", "cookieVal");
http.PostAddDataString("param1=postVal1&param2=postVal2", "application/x-www-form-urlencoded");
CurlResult resp2 = http.Get("https://chek.zennolab.com/proxy.php", "http://referer.test");
MessageBox.Show(resp2.Data);
Скачивание и отправка файла:
string tempFilePath = GetTempFileName("png", "captcha");
CurlResult resp3 = http.SaveFile("https://debug.registrator.pl/captcha/111.png", "", "", "", tempFilePath);
http.PostAddFile("111.png", tempFilePath);
resp3 = http.Get("https://chek.zennolab.com/proxy.php", "http://referer.test");
MessageBox.Show(tempFilePath + "\r\n\r\n" + resp3.Data);

Включение внутреннего прокси, запуск браузера, и установка скорости ввода данных:
browser.Proxification = true;
if (!browser.ServerStart()) { result.Error = "browser_start_error"; return; }
browser.UserSpeed = SeleniumJs.UserSpeedEnum.Realtime;
Настройка внутреннего прокси (кеширование):
browser.ProxyServer.CacheAdd(HttpsProxyServerTitanium.FilterOptions.Css | HttpsProxyServerTitanium.FilterOptions.Javascript | HttpsProxyServerTitanium.FilterOptions.Images | HttpsProxyServerTitanium.FilterOptions.Fonts);
Открытие страницы:
browser.PageOpen("https://debug.registrator.pl/selenium/");
Ожидание загрузки фреймов с паузой:
browser.LoadingFrameWait(500);
Поиск элемента и ввод текста:
var elmInput = browser.FindElement(By.Id("input1"));
if (elmInput != null) { browser.TextInElement(elmInput, "New demo text"); }
Поиск одного из нескольких элементов:
var elmInput2 = browser.FindElementAnyFromArray(new By[] { By.Id("input0"), By.Id("input1") }, 1);
if (elmInput2 != null) { browser.TextInElement(elmInput, " Add text"); }
Очистка текста в элементе:
browser.TextClearInElement(By.CssSelector("#form #input2"));
browser.TextInElement(By.CssSelector("#form #input2"), "New demo text 2");
Селектбокс:
browser.ClickOnSelectOption(By.Id("select1"), "1");
Клик по элементу:
browser.ClickOnElement(By.XPath("//input[@type='checkbox'][@id='checkbox1']"));
Скачивание картинки (делается скриншотом):
string imgDownloadFilePath = GetTempFileName("png", "image");
browser.ImageDownload(imgDownloadFilePath, By.Id("image2"));
MessageBox.Show("Image download path: " + imgDownloadFilePath);
Получение координат и размера элемента:
int imgPosX1, imgPosY1, imgPosX2, imgPosY2, imgPosWidth, imgPosHeight;
imgPosX1 = imgPosY1 = imgPosX2 = imgPosY2 = imgPosWidth = imgPosHeight = 0;
browser.GetElementPosition(By.Id("image1"), ref imgPosX1, ref imgPosY1, ref imgPosX2, ref imgPosY2, ref imgPosWidth, ref imgPosHeight);
MessageBox.Show(String.Format("Image info:\r\nPosition X1: {0}\r\nPosition Y1: {1}\r\nPosition X2: {2}\r\nPosition Y2: {3}\r\nWidth: {4}\r\nHeight: {5}", imgPosX1, imgPosY1, imgPosX2, imgPosY2, imgPosWidth, imgPosHeight));
Движение мыши к координатам:
browser.MouseMoveToCoords(50, 300);
Движение мыши к элементу:
browser.MouseMoveToElement(By.Id("image1"));
Обвести мышью элемент:
browser.MouseMoveAroundElement(By.Id("image2"));
Переключение фокуса на указанный фрейм (+ поиск элемента в нем):
browser.SwitchToFrame(0);
MessageBox.Show("Element in frame: " + (browser.ElementExists(By.Id("inputInFrame1")) ? "finded" : "not finded"));
Переключение фокуса на главный фрейм:
browser.SwitchToMainWindow();
Выполнение js-скрипта на странице:
browser.JsExec("$('#submit').removeClass('btn-primary').addClass('btn-danger');");
Движение мыши к координатам и клик (+ получение координат элемента):
int chbPosX1, chbPosY1, chbPosX2, chbPosY2, chbPosWidth, chbPosHeight;
chbPosX1 = chbPosY1 = chbPosX2 = chbPosY2 = chbPosWidth = chbPosHeight = 0;
browser.GetElementPosition(By.Id("checkbox2"), ref chbPosX1, ref chbPosY1, ref chbPosX2, ref chbPosY2, ref chbPosWidth, ref chbPosHeight);
browser.FullEmulation_MouseClickToCoords(chbPosX1 + 5, chbPosY1 + 5);
Движение мыши к элементу и клик по пункту селектора:
browser.FullEmulation_ClickOnSelectOption(By.Id("select2"), "3");
Движение мыши к элементу и его заполнение (для текстовых полей):
browser.FullEmulation_MouseAndFill(By.Id("textarea1"), "New demo text, line 1\r\nNew demo text, line 2");
Движение мыши к элементу и клик по нему:
browser.FullEmulation_MouseClickToElement(By.Id("checkbox3"));
Пауза:
browser.Sleep(500);
Получение url и контента страницы:
MessageBox.Show("Page url: " + browser.GetPageUrl() + "\r\n\r\nPage content:\r\n" + browser.GetPageContent().Replace("\r\n", "").Replace("\t", ""));
Проверка отсутствия элемента:
var elmAbsentTest = browser.ElementAbsent(By.Id("elmAbsent"), 1);
var elmAbsentTest2 = !browser.ElementAbsent(By.Id("elmInvis"), 1);
Проверка отсутствия элемента или его невидимости:
var elmAbsentInvisTest = browser.ElementAbsentOrInvisible(By.Id("elmAbsent"), 1);
var elmAbsentInvisTest2 = browser.ElementAbsentOrInvisible(By.Id("elmInvis"), 1);
var elmAbsentInvisTest3 = !browser.ElementAbsentOrInvisible(By.Id("elmVis"), 1);
Проверка существования элемента:
var elmExistsTest = browser.ElementExists(By.Id("elmVis"), 1);
var elmExistsTest2 = browser.ElementExists(By.Id("elmInvis"), 1);
var elmExistsTest3 = !browser.ElementExists(By.Id("elmAbsent"), 1);
browser.ClickOnElement(By.Id("btnAbsentToCreate"));
var elmExistsTest4 = browser.ElementExists(By.Id("elmAbsentToCreate"), 3);
Проверка существования элемента и его видимости:
var elmExistsVisTest = browser.ElementExistsAndVisible(By.Id("elmVis"), 1);
var elmExistsVisTest2 = !browser.ElementExistsAndVisible(By.Id("elmInvis"), 1);
var elmExistsVisTest3 = !browser.ElementExistsAndVisible(By.Id("elmAbsent"), 1);
browser.ClickOnElement(By.Id("btnInvisToVis"));
var elmExistsVisTest4 = browser.ElementExistsAndVisible(By.Id("elmInvisToVis"), 3);
Проверка присутствия и последующего отсутствия элемента (появился-пропал):
browser.ClickOnElement(By.Id("btnInvisToVisToInvis"));
var elmExistsAbsentTest = !browser.ElementExistsAbsent(By.Id("elmInvisToVisToInvis"), 4, 4);
browser.ClickOnElement(By.Id("btnAbsentToCreateToAbsent"));
var elmExistsAbsentTest2 = browser.ElementExistsAbsent(By.Id("elmAbsentToCreateToAbsent"), 4, 4);
Проверка существования элемента и его видимости, и последующая проверка отсутствия элемента или его невидимости (появился-пропал):
browser.ClickOnElement(By.Id("btnInvisToVisToInvis"));
var elmExistsVisAbsentInvisTest = browser.ElementExistsAndVisible2AbsentOrInvisible(By.Id("elmInvisToVisToInvis"), 4, 4);
browser.ClickOnElement(By.Id("btnAbsentToCreateToAbsent"));
var elmExistsVisAbsentInvisTest2 = browser.ElementExistsAndVisible2AbsentOrInvisible(By.Id("elmAbsentToCreateToAbsent"), 4, 4);
Проверка существования одного из нескольких элементов:
var elmExistsAnyFromArray = browser.ElementExistsAnyFromArray(new By[] { By.Id("input0"), By.Id("input1") }, 1);
Результаты тестов существования/видимости элементов:
MessageBox.Show(String.Format("TESTS\r\n"
	+ "Absent: {0}, {1}\r\n"
	+ "Absent or Invisible: {2}, {3}, {4}\r\n"
	+ "Exists: {5}, {6}, {7}, {8}\r\n"
	+ "Exists and Visible: {9}, {10}, {11}, {12}\r\n"
	+ "Exists to Absent: {13}, {14}\r\n"
	+ "Exists and Visible to Absent or Invisible: {15}, {16}\r\n"
	+ "Exists any from array: {17}\r\n",
	elmAbsentTest, elmAbsentTest2,
	elmAbsentInvisTest, elmAbsentInvisTest2, elmAbsentInvisTest3,
	elmExistsTest, elmExistsTest2, elmExistsTest3, elmExistsTest4,
	elmExistsVisTest, elmExistsVisTest2, elmExistsVisTest3, elmExistsVisTest4,
	elmExistsAbsentTest, elmExistsAbsentTest2,
	elmExistsVisAbsentInvisTest, elmExistsVisAbsentInvisTest2,
	elmExistsAnyFromArray
	));

Получение временного имени файла капчи, для скачивания и последующего распознавания:
GetTempFileName("png", "captcha")
Бан прокси - для переноса текущего прокси в список забаненных и логирования:
ProxyBanIp();
Долгосрочный бан прокси - для переноса текущего прокси в список долгосрочно-забаненных и логирования:
ProxyLongbanIp();
Мертвый прокси - для переноса текущего прокси в список мертвых и логирования:
ProxyDeadIp();
Живой прокси - для логирования текущего прокси:
ProxyGoodIp();
Логин занят - для удаления логина из файла (если используется):
LoginBusy(profile.Login);

Логирование:
result.Log("Debugging Data");
Результат работы скрипта (случайный: успех/ошибка):
result.Success = GeneratorSt.RandBool();
Данные успешного результата:
result.Data = "Success, Thread #" + Thread.CurrentThread.Name;
Текст ошибки:
result.Error = "Error #" + GeneratorSt.Rand(1, 3);