Вывести количество элементов на странице по Атрибутам и по Xpath
return instance.ActiveTab.FindElementsByAttribute("тэг","имя атрибута","значение","тип поиска").Count;
instance.ActiveTab.FindElementsByXPath("//div[@data-name='sessionSection']//a").Count;
Если нужно в switchint kolvo = instance.ActiveTab.FindElementsByAttribute("img","width","210","regexp").Count;
project.Variables["kolvo"].Value = kolvo.ToString();
switch (kolvo)
{
case 0:
project.SendInfoToLog("В аккаунте " + login_profilya + " " + kolvo + " видео", true);
break;
case 1:
project.SendInfoToLog("В аккаунте " + login_profilya + " уже есть " + kolvo + " видео", true);
break;
default:
throw new Exception("В switch не оказалось ничего подходящего.");
break;
}Forwarded from SHILY PROJECT (🧬SHILY🧬)
Вдруг кому-то пригодится дописывать текст в поле, вот на примере поисковой странички яда:
//передаем права на магию
Tab tab = instance.ActiveTab;
//идём на яд
tab.Navigate("ya.ru");
//чек на занятость
if (tab.IsBusy) tab.WaitDownloading();
//ищим элемент
HtmlElement heInputSearch = tab.FindElementByXPath("//input[contains(@name, 'text')]", 0);
//чек элемента
if (heInputSearch.IsVoid) throw new Exception("Элемент не найден");
//вводим первый текст
heInputSearch.SetValue("Текст1", "Middle");
//фокусируемся опять, если нет фокуса
heInputSearch.Focus();
//дописываем текст
heInputSearch.SetValue(" Текст2", "Middle", false, true);Спарсить значение с помощью Xpath и поместить его в переменную
HtmlElement slesh = instance.ActiveTab.FindElementByXPath("//div[@slot='description']/following-sibling::div[1]", 0);
string ss = slesh.InnerHtml;
Подстрока. Метод Substring:string strPhoneNumber = "79346690986";
string number = strPhoneNumber.Substring(1, 10); //1 - это номер знака, от которого будет отсчитываться подстрока. 10 - это сколько символов будет взято в подстроку.
Взять точное совпадение из списка
var list = project.Lists["Список"];
string id = project.Variables["id"].Value;
if(list.Contains(id))
{
//return "true";
}
else
{
//return "false";
}
Спарсить с помощью regex значения из переменной и положить их всех в список
text - то, что находится в этой переменной, по этим данным будет парситься regex
text - то, что находится в этой переменной, по этим данным будет парситься regex
string text = he.NextSibling.GetAttribute("innerHtml");
var regex1 = new Regex("(?<=Визит\\ в\\ ).*?(?=:)");
var list1 = project.Lists["Визиты"];
regex1.Matches(text).Cast<Match>().ToList().ForEach(m=>list1.Add(m.Value));
if(list1.Contains(chas_zayavki))
{
project.SendInfoToLog("ok", true);
}
else
{
project.SendInfoToLog("no", true);instance.ActiveTab.MainDocument.EvaluateScript("location.reload()"); // перезагрузка текущей страницы из кэша
instance.ActiveTab.MainDocument.EvaluateScript("location.reload(true)"); // перезагрузка текущей страницы с сервераТекущую дату в переменную
string dt = DateTime.Now.ToString("dd MMMM yyyy", new System.Globalization.CultureInfo("ru-RU"));Установить текущую вкладку как активную
instance.ActiveTab.SetActive();Удалить вкладку:
instance.GetTabByAddress("youtube").Close();Обработать каждую строку в списке регулярным выражением и сохранить там же
IZennoList list1 = project.Lists["Time"];Заменить в каждой строке списка:
List<string> lstTemp = new List<string>();
foreach(var s in list1)
lstTemp.Add(Regex.Match(s, "(?<=:).*").Value);
list1.Clear(); // очищаем список
list1.AddRange(lstTemp); // сейвим временный список
IZennoList list1 = project.Lists["Список"];Сосчитать количество слов в переменной
List<string> lstTemp = new List<string>();
foreach(var s in list1){
lstTemp.Add(Macros.TextProcessing.Replace(s, ".", ",", "Text", "All"));
}
list1.Clear(); // очищаем список
list1.AddRange(lstTemp); // сейвим временный список
return Regex.Matches(perem, @"\b[a-zA-Z0-9а-яА-Я]{1,}\b").Count;
Замена участка в конкретной строке в списке//парсим значение из заранее определённой строки, которое будем менять
string num_str = Regex.Match(project.Lists["spis"][1], @"(?<=\.zpprofile).*").Value;
//замена значения в конкретной строке с сохранением
project.Lists["spis"][1] = Regex.Replace(project.Lists["spis"][1], "это меняем", "на это").ToString();
Forwarded from 🧬SHILY🧬
По идее, можно ещё так, но тут постоянная работа с файлом:
var lst = project.Lists["Time"];
for (int i = 0; i < lst.Count; i++)
{
lst.Add($"{Regex.Match(lst[0], "(?<=:).*").Value} {i}");
lst.RemoveAt(0);
}Forwarded from 🧬SHILY🧬
Если у тебя работа в многопотоке, то так лучше вешать лок на список:
var lst = project.Lists["Time"];
lock (SyncObjects.ListSyncer)
{
for (int i = 0; i < lst.Count; i++)
{
lst.Add($"{Regex.Match(lst[0], "(?<=:).*").Value} {i}");
lst.RemoveAt(0);
}
}Forwarded from 🧬SHILY🧬
Тут по аналогии:
IZennoList list1 = project.Lists["Time"];
List<string> lstTemp = new List<string>();
lock (SyncObjects.ListSyncer)
{
foreach(var s in list1)
lstTemp.Add(Regex.Match(s, "(?<=:).*").Value);
}
list1.Clear(); // очищаем список
list1.AddRange(lstTemp); // сейвим временный списокОпределить чётное число или нечётное
if (num % 2 == 0)
СМС
Получить номер
Получить номер
//Подменю "Данные-Директории". Действие "Получить номер"
//Переходим на сайт (для демонстрации работы)
Tab Tab1 = instance.ActiveTab;
if (Tab1.URL!="https://passport.yandex.ru/registration/") {
Tab1.Navigate("https://passport.yandex.ru/registration/");
Tab1.WaitDownloading();
}
string strPhoneNumber;
//ZennoPoster.Sms.GetNumber: получаем номер телефона и код регистрации для дальнейшей работы
string strRegistrationID = ZennoPoster.Sms.GetNumber("SmsActivate.dll", out strPhoneNumber, "ya", "any");
//Сохраняем полученные данные в переменных проекта для использования в следующих сниппетах
project.Variables["str_registration_id"].Value=strRegistrationID;
project.Variables["str_phone_number"].Value=strPhoneNumber;
project.SendInfoToLog(String.Format("Получен телефонный номер: {0}, id регистрации: {1}.", strPhoneNumber, strRegistrationID));
//Примечания:
//1. Атрибуты метода ZennoPoster.Sms.GetNumber:
// первый - имя dll-библиотеки смс-сервиса (смотрите примечание №3);
// второй - имя переменной, в которую будет помещён полученный номер телефона;
// третий - кодовое название сервиса, на котором мы проходим регистрацию. Перечень кодовых обозначений смотрите в документации API сервиса (примечание №3)
// четвёртый - регион оператора, к которому должен относиться полученный номер. "any" - любой оператор.
//2. Перед запуском кода не забудьте прописать API-ключ или логин+пароль для смс-сервиса;
//3. ZennoPoster поддерживает три сервиса для смс-активаций:
// sms-activate.ru (библиотека SmsActivate.dll, описание API: http://sms-activate.ru/index.php?act=api);
// sms-reg.com (библиотека SmsReg.dll, описание API: http://sms-reg.com/docs/API.html);
// smsvk.net (библиотека SmsVk.dll, описание API: http://smsvk.net/api.html).
//4. По работе с смс-сервисами будет отдельный подробный подкурс, в котором будут рассмотрены все варианты команд.
Изменить статус
//Подменю "Данные-Директории". Действие "Изменить статус"
//Сразу после выполнения это сниппета заполните номер телефона и нажмите "Получить код". Затем без промедлений переходите к следующему сниппету "Получить статус"
string strRegistrationID = project.Variables["str_registration_id"].Value; //получаем ID регистрации из переменной уровня проекта.
//ZennoPoster.Sms.SetStatus: устанавливаем статус операции смс-сервиса
string strSetStatusResult = ZennoPoster.Sms.SetStatus("SmsActivate.dll", strRegistrationID, InterfacesLibrary.SmsService.Enums.SmsServiceStatus.Ready);
if (strSetStatusResult=="Ready") {
project.SendInfoToLog("Теперь смс-сервис ждёт получения смс на полученный ранее номер");
}else{
project.SendInfoToLog("Сбой в работе сервиса, сервис не готов принять СМС");
}
//Примечания:
//1. Атрибуты метода ZennoPoster.Sms.SetStatus:
// первый - имя dll-библиотеки смс-сервиса (смотрите примечание №3);
// второй - id регистрации, полученный на шаге запроса номера телефона;
// третий - Перечисление InterfacesLibrary.SmsService.Enums.SmsServiceStatus для выбора статуса, который мы хотим передать сервису. Все статусы:
// Cancel - отмена активации;
// Close - закрыть (close) активацию;
// Ready - На номер вскоре придёт смс с кодом от сервиса, указанного на этапе получения номера;
// RetryGet - Необходимо принять ещё один другой код подтверждения от того же сервиса;
// Used - номер, полученный на первом шаге, уже использовался для регистрации на этом сервисе.
//2. Перед запуском кода не забудьте прописать API-ключ или логин+пароль для смс-сервиса;
//3. ZennoPoster поддерживает три сервиса для смс-активаций:
// sms-activate.ru (библиотека SmsActivate.dll, описание API: http://sms-activate.ru/index.php?act=api);
// sms-reg.com (библиотека SmsReg.dll, описание API: http://sms-reg.com/docs/API.html);
// smsvk.net (библиотека SmsVk.dll, описание API: http://smsvk.net/api.html).
//4. По работе с смс-сервисами будет отдельный подробный подкурс, в котором будут рассмотрены все варианты команд.
Получить статус
//Подменю "Данные-Директории". Действие "Получить статус"
//Перед выполнением этого сниппета заполните номер телефона и нажмите "Получить код" (пройдите шаги "Получить номер" и "Изменить статус").
string strRegistrationID = project.Variables["str_registration_id"].Value; //получаем ID регистрации из переменной уровня проекта.
//ZennoPoster.Sms.GetStatus: получаем текущий статус смс-сервиса (в данном случае он будет содержать код подтверждения или сообщение об ошибке)
string strConfirmationCode = ZennoPoster.Sms.GetStatus("SmsActivate.dll", strRegistrationID);
project.SendInfoToLog("Получен код подтверждения: " + strConfirmationCode);
//Примечания:
//1. Атрибуты метода ZennoPoster.Sms.GetStatus:
// первый - имя dll-библиотеки смс-сервиса (смотрите примечание №3);
// второй - id регистрации, полученный на шаге запроса номера телефона;
//2. Статус можно получить множество раз
//3. Перед запуском кода не забудьте прописать API-ключ или логин+пароль для смс-сервиса;
//4. ZennoPoster поддерживает три сервиса для смс-активаций:
// sms-activate.ru (библиотека SmsActivate.dll, описание API: http://sms-activate.ru/index.php?act=api);
// sms-reg.com (библиотека SmsReg.dll, описание API: http://sms-reg.com/docs/API.html);
// smsvk.net (библиотека SmsVk.dll, описание API: http://smsvk.net/api.html).
//5. По работе с смс-сервисами будет отдельный подробный подкурс, в котором будут рассмотрены все варианты команд.
Демо получения смс
//Объединим предыдущие три сниппета в один
//объявляем необходимые переменные
Tab Tab1 = instance.ActiveTab;
string strPhoneNumber = String.Empty;
string strConfirmationCode = String.Empty;
//получаем номер телефона и id регистрации
string strRegistrationID = ZennoPoster.Sms.GetNumber("SmsActivate.dll", out strPhoneNumber, "ya", "any");
project.SendInfoToLog("Получен телефонный номер: " + strPhoneNumber);
//сообщаем сервису, что в ближайшие 2 минуты на номер придёт смс от указанного нами сервиса
string strSetStatusResult = ZennoPoster.Sms.SetStatus("SmsActivate.dll", strRegistrationID, InterfacesLibrary.SmsService.Enums.SmsServiceStatus.Ready);
//получаем код подтверждения или сообщаем об ошибке
if (strSetStatusResult=="Ready") {
//заполняем номер телефона в поле и нажимаем "Получить код"
Tab1.FindElementByXPath("//input[@name='phone_number']", 0).SetValue(strPhoneNumber, instance.EmulationLevel);
Tab1.FindElementByXPath("//span[contains(text(), 'Получить код')]/ancestor::button", 0).Click();
//здесь можно сделать дополнительное ожидание, но работает и так.
strConfirmationCode = ZennoPoster.Sms.GetStatus("SmsActivate.dll", strRegistrationID);
}else{
project.SendInfoToLog("Произошла ошибка. Сервис смс-активации не готов");
return null;
}
//Заполняем поле кодом подтверждения
Tab1.FindElementByXPath("//input[contains(@class,'code_entry')]", 0).SetValue(strConfirmationCode, instance.EmulationLevel);
project.SendInfoToLog("Получен код подтверждения: " + strConfirmationCode);
+ Добавлена возможность получения количества активных потоков проекта в текущий момент времени. Для этого необходимо воспользоваться C# кодом:C#:
int threadsZP = ZennoPoster.GetThreadsCount();
int currentTaskThreadsById = ZennoPoster.GetThreadsCount(Id);
int currentTaskThreadsByName = ZennoPoster.GetThreadsCount(Name);Пример сохранения трафика в таблицу:
var traffic = instance.ActiveTab.GetTraffic();Пример работы страфиком:
var tt = project.Tables["trafficTable"];
tt.AddRow(new List<string>()
{
"Method",
"ResultCode",
"Url",
"ContentType",
"RequestHeaders",
"RequestCookies",
"RequestBody",
"ResponseHeaders",
"ResponseCookies",
"ResponseBody"
});
foreach(TrafficItem t in traffic)
{
var row = new List<string>()
{
t.Method,
t.ResultCode.ToString(),
t.Url,
t.ResponseContentType,
t.RequestHeaders,
t.RequestCookies,
t.RequestBody,
t.ResponseHeaders,
t.ResponseCookies,
t.ResponseBody == null ? "" : Encoding.UTF8.GetString(t.ResponseBody, 0, t.ResponseBody.Length)
};
tt.AddRow(row);
}
var traffic = instance.ActiveTab.GetTraffic();
foreach(var t in traffic)
{
if (t.Url == "https://zennolab.com/ru/")
{
return "Запрос был успешно отправлен";
}
}
return "Такого запроса нет";
📌После метода (сбора) "instance.ActiveTab.GetTraffic()" трафик автоматически чистится.
