Сниппеты C# Zennoposter / Зеннопостер
322 subscribers
3 photos
14 links
Админы:
@cmvvo
@MrSHILY
Download Telegram
Переименование файла
Forwarded from 🧬SHILY🧬
//Новое имя файла (просто текст)
string textName = "тополяяя"; // сюда можешь свою переменную присобачить project.Variables["zagolovok_tovara_sparsenniy"].Value вместо текста

//Чекаем имя на наличие бякошных символов
if (!Regex.IsMatch(textName, "\\\\.*?|/.*?|<.*?|>.*?|:.*?|\\*.*?|\\?.*?|\".*?|\\|.*?"))
{
//путь к файлу (который будем перемещать)
string PathFileToMove = project.Directory + @"\ляляля.txt";

//наделяем перменную магическими свойствами для получения данных о файле, который перемещаем
var _f = new FileInfo(PathFileToMove);

//новый путь + имя + расширение
string NewPathFile = _f.DirectoryName + @"\" + textName + _f.Extension;

//перемешаем файл
File.Move(PathFileToMove, NewPathFile);
}
else
{
project.SendWarningToLog("Есть бякошные символы в новом имени для файла: " + textName, true);
}
Forwarded from 🧬SHILY🧬
Такой вариант ещё, где все ошибки обработал:
//Новое имя файла (просто текст)
string textName = "тополяяя";

//путь к файлу (который будем перемещать)
string PathFileToMove = project.Directory + @"\ляляля.txt";

if (File.Exists(PathFileToMove))
{
//Чекаем имя на наличие бякошных символов
if (!Regex.IsMatch(textName, "\\\\.*?|/.*?|<.*?|>.*?|:.*?|\\*.*?|\\?.*?|\".*?|\\|.*?"))
{
//наделяем перменную магическими свойствами для получения данных о файле, который перемещаем
var _f = new FileInfo(PathFileToMove);

//новый путь + имя + расширение
string NewPathFile = _f.DirectoryName + @"\" + textName + _f.Extension;

if (!File.Exists(NewPathFile))
{
//перемешаем файл
File.Move(PathFileToMove, NewPathFile);
}
else
{
project.SendWarningToLog("Файла c таким именем уже существует: " + NewPathFile, true);
}
}
else
{
project.SendWarningToLog("Есть бякошные символы в новом имени для файла: " + textName, true);
}
}
else
{
project.SendWarningToLog("Файла не существует: " + PathFileToMove, true);
}
Проверка, загружено ли то, что спарсено, если нет, то пауза, и так по кругу
do {
if (tab.IsBusy) tab.WaitDownloading();
string result1 = Regex.Match(tab.DomText, "Новая[\\w\\W]*?версию").Value;
if (!String.IsNullOrWhiteSpace(result1)) project.Variables["novaya_tvorcheskaya_studiya"].Value = result1;
}
while (project.Variables["novaya_tvorcheskaya_studiya"].Value != "Новая Творческая студия окончательно сменила классическую версию");
project.SendInfoToLog("Вошли в творческую студию", true);
System.Threading.Thread.Sleep(700);
Присваиваем значение перемменной, исходя из значения другой переменной
Если переменная month нашего проекта будет равна "янв", то результат сниппета будет = 1, если "фев", то результат выполнения сниппета будет = 2 и т.д.
В лучшем виде заменяет switch шаг+установку значения переменой.
return "янв|1,фев|2,март|3,апр|4,май|5,июн|6,июл|7,авг|8,сен|9,окт|10,ноя|11,дек|12".Split(',').First(s=>s.Contains(project.Variables["month"].Value)).Split('|')[1];
Разбиваем строку (т.е. сплитуем) по разделителю | и раскидываю полученные части по переменным.
string acc_full = project.Variables["account_source"].Value;
var account = acc_full.Split('|').ToList();
project.Variables["login"].Value = account[0];
project.Variables["pass"].Value = account[1];
project.Variables["hz"].Value = account[2];
Проверка наличия строки в списке. С учетом регистра и т.д., т.е. текст в переменной и строка списка должны быть идентичны. Если нашлась строка то выводит true, а иначе false.
var list = project.Lists["BlackList"];
string id = project.Variables["id"].Value;
if(list.Contains(id))
{
return "true";
}
else
{
return "false";
}



Проверка другим методом:
// берем из переменной текст, который надо искать
var textContains = project.Variables["listSearchTextContains"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["SourceList"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
for(int i=0; i < sourceList.Count; i++)
{
// читаем строку из списка
var str = sourceList[i];
// проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
if (str.Contains(textContains))
return "yes";
}
}
// если ничего не нашли возвращаем "no"
return "no";
Вернуть номер потока:
string thread = Thread.CurrentThread.ManagedThreadId.ToString();
Сниппет, который ждёт появления элемента на странице по "DOM"
var pr = 0;
do {
string dom = Regex.Match(instance.ActiveTab.DomText, "(?<=<i\\ class=\"fa\\ fa-refresh\\ fa-pulse\\ fa-fw\"></i>).*(?=</div></div>)").Value;
if (!String.IsNullOrWhiteSpace(dom))
{
project.SendInfoToLog("Товары не прогрузились на странице. Ждём.", true);
pr = 1;
System.Threading.Thread.Sleep(2500);
}
else {
project.SendInfoToLog("Товары прогрузились", true);
pr = 2;
}
}
while (pr == 1);
Получить последний элемент коллекции с удалением:
var lst = project.Lists["URL_RES_THREAD_LIST"];

string str = String.Empty;

lock (SyncObjects.ListSyncer)
{
str = lst.Last();
lst.RemoveAt(lst.Count - 1);
}
Вывести количество элементов на странице по Атрибутам и по Xpath
return instance.ActiveTab.FindElementsByAttribute("тэг","имя атрибута","значение","тип поиска").Count;

instance.ActiveTab.FindElementsByXPath("//div[@data-name='sessionSection']//a").Count;

Если нужно в switch

int 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

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);
}