Вопросы-ответы
Общие вопросы
Раздел «Задания»
Общая информация
Проект состоит из двух файлов, "Program.cs" - с кодом проекта, и "TaskProject.csproj" - для открытия его в Visual Studio.
В шапке файла закомментированы системные xml-теги, содержащие мета-данные и необходимые для правильной работы.
В шапке файла закомментированы системные xml-теги, содержащие мета-данные и необходимые для правильной работы.
- name - название проекта.
- version - версия проекта.
- description - описание проекта.
- references - ссылки на сторонние dll.
Запуск проекта
В регистраторе, разделе "Задания", выберите свой файл "Program.cs".
Запуск среды разработки
В регистраторе, разделе "Задания", экспортируйте проект в новую папку и запустите файл "TaskProject.csproj" (в Visual Studio). Это минимальный проект, на основании которого можно делать свой.
Если у вас есть dll, которую нужно добавить в проект:
Если у вас есть 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));
Сервис антикапчи (http-запросы)
Запрос баланса:
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));
}
Выполнение http-запросов
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¶m2=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);