СМС
Получить номер
Получить номер
//Подменю "Данные-Директории". Действие "Получить номер"
//Переходим на сайт (для демонстрации работы)
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()" трафик автоматически чистится.Переключение на вкладку с названием
Tab tab = instance.GetTabByAddress("vk");
tab.SetActive();
Можно в одну строку:instance.GetTabByAddress("vk").SetActive();
Получить имя текущей вкладки:return instance.ActiveTab.Name;
Взять весь текст из файла и положить его в переменную
string text = System.IO.File.ReadAllText(@"C:\111.txt");Удаление пустых строк
var list = project.Lists["Название списка"];
string data = string.Empty;
lock(SyncObjects.ListSyncer) {
for(int q = 0; q < list.Count; q++){
data = list[q];
if (String.IsNullOrWhiteSpace(data.Trim())) list.RemoveAt(q);
}
}
Заменить по первому вхождению:
string novoe_chislo = $"1|0,2|1,3|2,4|3,5|4,6|5,7|6,8|7,9|8,10|9,11|10,12|11,13|29,31|30".Split(',').First(s=>s.Contains(chislo_mesyaca)).Split('|')[1];
Заменить по точному вхождению:string novoe_chislo = $"1|0,2|1,3|2,4|3,5|4,6|5,7|6,8|7,9|8,10|9,11|10,12|11,13|29|28,30|29,31|30".Split(',').First(s => s.Split('|')[0].Equals(chislo_mesyaca, StringComparison.Ordinal)).Split('|')[1];Проверка вкладки браузера на существование по названию, если есть такая, то переход на неё. А если нет вкладки с таким именем, то создать её и перейти на неё:
Tab[] tabs = instance.AllTabs;
for (int i = 0; i < tabs.Count(); i++) {
if (tabs[i].Name=="1") {
tabs[i].SetActive();
return "Вкладка активирована";
}
}
instance.NewTab("1");
instance.GetTabByAddress("1").SetActive();
return "Открыли и активировали вкладку";
Удобный сниппет для подтверждения номера по c# в упрощенном для понимания виде с комментариями:
//Создаём переменные в которые будут помещены значения
string CountryNumber = String.Empty;
string strPhoneNumber;
//Запрос получения номера
string strRegistrationID = ZennoPoster.Sms.GetNumber("SmsHub.dll", out strPhoneNumber, "ig", "any", null, "&country=" + CountryNumber);
//Сохраняем полученные данные в переменных проекта для использования в следующих сниппетах
project.Variables["str_registration_id"].Value = strRegistrationID;
project.Variables["str_phone_number"].Value = strPhoneNumber;
project.SendInfoToLog(String.Format("Получен телефонный номер: {0}, id регистрации: {1}.", strPhoneNumber, strRegistrationID));
//Вводим полученный номер в поле, например так:
instance.ActiveTab.FindElementByAttribute("input:tel", "fulltagname", "input:tel","text", 0).SetValue(strPhoneNumber, "SuperEmulation", true, false);
string strSetStatusResult = ZennoPoster.Sms.SetStatus("SmsHub.dll", strRegistrationID, InterfacesLibrary.SmsService.Enums.SmsServiceStatus.Ready);
if (strSetStatusResult=="Ready") {
project.SendInfoToLog("Теперь смс-сервис ждёт получения смс на полученный ранее номер");
}
else{
project.SendInfoToLog("Сбой в работе сервиса, сервис не готов принять СМС");
}
//Получение кода подтверждения
string strConfirmationCode = ZennoPoster.Sms.GetStatus("SmsHub.dll", strRegistrationID);
project.SendInfoToLog("Получен код подтверждения: " + strConfirmationCode);
//Вводим полученный код подтверждения
instance.ActiveTab.FindElementByAttribute("input:tel", "fulltagname", "input:tel","text", 0).SetValue(strConfirmationCode, "SuperEmulation", true, false);
Загрузка файлов. Где "pat" это путь к файлу. После этого сниппета нужно делать клик на кнопку, или другой объект чтобы файл загрузился. Этот код добавляет путь к файлу в буфер обмена для загрузки:
instance.SetFileUploadPolicy("ok", "");
instance.SetFilesForUpload(pat);
Текст в буфер обмена:System.Windows.Forms.Clipboard.SetText("тест текст");Второй администратор этого канала @SH_ILY затеял сохранять полезные сниппеты на pastebin.com. Его канал - https://t.me/SHILY_PROJECT Рекомендую подписаться, там говорят правду.
Forwarded from SHILY PROJECT (🧬SHILY🧬)
Общая папка сниппетов:
#SNIPPET
Удобнее будет, думаю, складировать сниппеты в папочку на pastebin.com, а здесь чисто описание и ссыль на добавленный сниппет.Ссылка на общую папку: https://pastebin.com/u/SHILY/1/8Z7xT8CJ
#SNIPPET
Управление выполнениями. (Сколько делать)
Добавить выполнение:
Добавить выполнение:
var id = Guid.Parse(project.TaskId);Обнулить:
ZennoPoster.AddTries(id, 1);
var id = Guid.Parse(project.TaskId);Установить нужное кол-во (например 5):
ZennoPoster.SetTries(id, 0);
var id = Guid.Parse(project.TaskId);
ZennoPoster.SetTries(id, 5);
Добавить строку в текстовый файл:
string ListPath = project.Directory+ "/Название файла.txt";
List <string> ListTest = new List<string>();
ListTest = File.ReadAllLines(ListPath).ToList();
ListTest.Add("Строчка текста, что добавится в файл");
File.WriteAllLines(ListPath, ListTest);
Сортировка чисел в списке по возрастанию:
//конвертация строки в числа
for(int u = 0; u < list1.Count; u++){
var number = Convert.ToInt32(list1[u]);
digitsList.Add(number);
}
digitsList.Sort();
//Обратно каждую строку в числа
for(int a = 0; a < digitsList.Count; a++)
{
var str = digitsList[a].ToString();
list1.Add(str);
}
Удаление пустых строк в таблице:
for (int i = 0; i < list1.Count;)
{
if (i == list1.Count || list1.Count == 0) break;
if (String.IsNullOrEmpty(list1[i])) list1.RemoveAt(i); else i++;
}
Channel name was changed to «Сниппеты C# Zennoposter / Зеннопостер»
Удалить файл.
В переменной way должен быть путь к любому файлу, например:
"C:\Users\Zennoposter\Desktop\22\profile.zp"
Удаление всего содержимого в папке. Тут в пути указывается путь к папке, а не файлу.
В переменной way должен быть путь к любому файлу, например:
"C:\Users\Zennoposter\Desktop\22\profile.zp"
string vzyatiy_profil = project.Variables["way"].Value;
System.IO.File.Delete(way);
Удаление всего содержимого в папке. Тут в пути указывается путь к папке, а не файлу.
System.IO.DirectoryInfo di = new DirectoryInfo(@"C:\Users\Zenno\Desktop\22");
foreach (FileInfo file in di.GetFiles()){
file.Delete();}
Установить прокси:
string ip = "192.168.0.1";
string port = "8080";
string proxyType = "http"; // http или socks5
string login = "login";
string password = "password";
instance.SetProxy(ip, Convert.ToInt32(port), proxyType, login, password, false, true, true, true);