Сниппеты C# Zennoposter / Зеннопостер
322 subscribers
3 photos
14 links
Админы:
@cmvvo
@MrSHILY
Download Telegram
Заменить по первому вхождению:
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🧬)
Общая папка сниппетов:

Удобнее будет, думаю, складировать сниппеты в папочку на 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);
ZennoPoster.SetTries(id, 0);

Установить нужное кол-во (например 5):
var id = Guid.Parse(project.TaskId);
ZennoPoster.SetTries(id, 5);
Channel name was changed to «Сниппеты C# Zennoposter»
Добавить строку в текстовый файл:

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"

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);
Удалить строки из списка, содержащие текст:


// берем из переменной текст, который надо искать
var textContains = project.Variables["Переменная"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["Список"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
for(int i=0; i < sourceList.Count; i++)
{
// читаем строку из списка
var str = sourceList[i];
// проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
if (str.Contains(textContains))
{
//удаляем строку содержащую текст
sourceList.RemoveAt(i);
}
}
}


 for(int i=0; i < list.Count; i++){
var str = list[i];
if(str.Contains("http")){
list.RemoveAt(i);
}
}
👍1
Положить все строки в переменную последовательно:

var count = project.Lists["List"].Count();
var str = string.Join("\r\n", project.Lists["List"].Take(count));
project.Variables["text"].Value = str;

Установка юзер агента:
project.Profile.UserAgent = project.Variables["UA"].Value;
project.Profile.UserAgentAppVersion = Macros.TextProcessing.Regex(project.Profile.UserAgent.ToString(), @"(?<=Mozilla/).*", "0")[0].FirstOrDefault();
Полезный сниппет от @SH_ILY для перемещения файла в новое место с переименованием:

string pathFile = @"C:\ZennoProjects\ShilyHelper\test.txt"; // путь к файлу.
string pathNewDirectory = @"C:\ZennoProjects\ShilyHelper\NewFolder"; // новая директория для файла.
string newNameFile = "Мой перемещенный файл";

var fileInfo = new FileInfo(pathFile);
var directoryInfo = new DirectoryInfo(pathNewDirectory);

string newPathFile = Path.Combine(directoryInfo.FullName, newNameFile + fileInfo.Extension);

try
{
if (!fileInfo.Exists) throw new Exception($"Файла не существует: {fileInfo.FullName}"); // проверяем файл на существование.
if (!directoryInfo.Exists) Directory.CreateDirectory(directoryInfo.FullName); // проверяем директорию на существование, если её нет - создаем.

File.Move(fileInfo.FullName, newPathFile); // перемещаем файл.

project.SendInfoToLog($"Новый путь файла: {newPathFile}");
}
catch(Exception ex)
{
project.SendWarningToLog(ex.Message); // вывод ошибки в лог.
}
Сниппет для скачивания файла на компьютер с задаванием ему имени:

string url = "https://assets.foxtons.co.uk/w/2200/1608286244/nwhm4911510_floorplan.png"; // урл файла, который качаем.
string nameFile = "мой скаченный файл"; // имя файла.
string downloadPath = $@"{project.Directory}\image\"; // путь, куда будет скачен файл.

if (!Directory.Exists(downloadPath)) Directory.CreateDirectory(downloadPath); // проверяем папку на существование (создаем, если её нет).

using (var wc = new System.Net.WebClient()) File.WriteAllBytes($@"{downloadPath}\{nameFile}{Path.GetExtension(url)}", wc.DownloadData(url));
Сниппет для копирования файла в новую директорию:

string pathFile = @"C:\ZennoProjects\ShilyHelper\test.txt"; // путь к файлу.
string pathNewDirectory = @"C:\ZennoProjects\ShilyHelper\NewFolder"; // новая директория для файла.

var fileInfo = new FileInfo(pathFile);
var directoryInfo = new DirectoryInfo(pathNewDirectory);

string newPathFile = Path.Combine(directoryInfo.FullName, fileInfo.Name);

try
{
if (!fileInfo.Exists) throw new Exception($"Файла не существует: {fileInfo.FullName}"); // проверяем файл на существование.
if (!directoryInfo.Exists) Directory.CreateDirectory(directoryInfo.FullName); // проверяем директорию на существование, если её нет - создаем.

File.Copy(fileInfo.FullName, newPathFile); // перемещаем файл.

project.SendInfoToLog($"Новый путь файла: {newPathFile}");
}
catch(Exception ex)
{
project.SendWarningToLog(ex.Message); // вывод ошибки в лог.
}



Если нужно скопированный файл переименовать:

string pathFile = @"C:\ZennoProjects\ShilyHelper\test.txt"; // путь к файлу.
string pathNewDirectory = @"C:\ZennoProjects\ShilyHelper\NewFolder"; // новая директория для файла.
string newNameFile = "Мой перемещенный файл";

var fileInfo = new FileInfo(pathFile);
var directoryInfo = new DirectoryInfo(pathNewDirectory);

string newPathFile = Path.Combine(directoryInfo.FullName, newNameFile + fileInfo.Name);

try
{
if (!fileInfo.Exists) throw new Exception($"Файла не существует: {fileInfo.FullName}"); // проверяем файл на существование.
if (!directoryInfo.Exists) Directory.CreateDirectory(directoryInfo.FullName); // проверяем директорию на существование, если её нет - создаем.

File.Copy(fileInfo.FullName, newPathFile); // перемещаем файл.

project.SendInfoToLog($"Новый путь файла: {newPathFile}");
}
catch(Exception ex)
{
project.SendWarningToLog(ex.Message); // вывод ошибки в лог.
}
Добавление текста во все строки списка:

var sourceList = project.Lists["Список 1"]; //Название списка
{
for(int i=0; i < sourceList.Count; i++)
{
sourceList[i] = "что добавляем" + sourceList[i];
}
}


Чтобы управлять тем, куда будет добавлять текст, изменяйте следующую конструкцию:
sourceList[i] = "что добавляем" + sourceList[i]; //добавить в начало каждого элемента в списке
sourceList[i] = sourceList[i +] + "что добавляем"; //добавить в конец каждого элемента в списке
sourceList[i] = sourceList[i +] + " " + "что добавляем"; //добавить в конец каждого элемента в списке с пробелом
Округление чисел:

//До большего числа. В этом примере будет 16.
double myDouble = 15.4;
return (int)Math.Ceiling(myDouble); //В этой строке (int) это тип переменной, в которую будет преобразовано число. Можно ещё преобразовывать например в long, double, float.

//До ближайшего целого числа. В этом примере будет 15.
double myDouble = 15.4;
return (int)Math.Round(myDouble, 0);


Если же необходимо округлить до сотых:
double x = 1.64;
x = Math.Round(x, 1);
return x;
В настоящий момент функция Drag & Drop стандартными кубиками зеннопостера не работает должным образом. С помощью этого сниппета вы сможете их заменить:

instance.ActiveTab.FullEmulationMouseCurrentPosition = new Point(220,1000);
instance.ActiveTab.FullEmulationMouseClick("left","down");

instance.ActiveTab.FullEmulationMouseDragAndDrop(220,1000, 350, 1000);
instance.ActiveTab.FullEmulationMouseClick("left","up");


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

Загрузка профиля.
// Путь к профилю
string profilePath = Path.Combine(project.Path, "1.zpprofile");
// Создавать ли отстутствующие переменные
bool createVars = false;

#region Load
Action<string,bool> Load = (path, createVariables) =>
{
string oldUA = project.Profile.UserAgent;
string oldName = project.Profile.Name;
string oldEmail = project.Profile.Email;
int oldLength = project.Profile.ToString().Length;

project.Profile.Load(path, createVariables);

string newUA = project.Profile.UserAgent;
string newName = project.Profile.Name;
string newEmail = project.Profile.Email;
int newLength = project.Profile.ToString().Length;

if (oldUA == newUA && oldName == newName && oldLength == newLength && oldEmail == newEmail)
{
throw new Exception("Ошибка загрузки профиля. Путь: " + path);
}
};
#endregion

// Загрузка профиля
Load(profilePath, createVars);


Сохранение профиля.
// Путь к профилю
string profilePath = Path.Combine(project.Path, "2.zpprofile");
// Переменные проекта, которые нужно сохранить
var saveVars = new[] { "var1", "var2" };

#region Save
Action<string,string[]> Save = (path, saveVariables) =>
{
if (File.Exists(path))
{
string profilePathAlt = profilePath.Replace(".zpprofile", "_ForCheck.zpprofile");

// Сохранение копии профиля
project.Profile.Save(profilePathAlt, true, true, true, true, true, true, true, true, true, saveVariables);

var infoOld = new FileInfo(profilePath);
var infoNew = new FileInfo(profilePathAlt);
// Допустимая погрешность в байтах
long diff = 5 * 1024;

// Если новый файл тот же или больше, с учётом допустимой погрешности
if (infoNew.Length >= infoOld.Length - diff)
{
// Сохранение профиля и удаление копии
project.Profile.Save(profilePath, true, true, true, true, true, true, true, true, true, saveVariables);
File.Delete(profilePathAlt);
}
else
{
string text = String.Format("Обнаружено уменьшение размера профиля в байтах. Старый размер: {0} Новый размер: {1}. Путь: {2}",
infoOld.Length, infoNew.Length, profilePath);
throw new Exception(text);
}
}
else
{
project.Profile.Save(path, true, true, true, true, true, true, true, true, true, saveVariables);
}
};
#endregion

// Сохранение профиля
Save(profilePath, saveVars);