Как вытащить куку из CookieContainer для запроса №2:
string cookies = String.Empty;
var items = project.Profile.CookieContainer.Get("vk.com");
foreach(var item in items) cookies += item.Name + "=" + item.Value + "; ";
project.Variables["cookies"].Value = cookies;
Эмуляция.
Примечание: для эмулирования нужно объявить HtmlElement, на который нужно навести мышь или где кликнуть чтобы ввести текст.
Можно как с помощью instance.ActiveTab.FindElementByAttribute("span", "class", "signup-form__sex-caption", "regexp", 0);
так и с помощью Xpath находить элементы.
Можно так
Если нужно просто нажать на кнопку
Цветной лог:
Примечание: для эмулирования нужно объявить HtmlElement, на который нужно навести мышь или где кликнуть чтобы ввести текст.
Можно как с помощью instance.ActiveTab.FindElementByAttribute("span", "class", "signup-form__sex-caption", "regexp", 0);
так и с помощью Xpath находить элементы.
//Клик в текущем положении мышью
Active.FullEmulationMouseClick("left", "click");
// клик по координатам
instance.ActiveTab.MouseClick(100, 100, "left", "click");
//получаем координаты текущего положения мыши
int x = instance.ActiveTab.FullEmulationMouseCurrentPosition.X;
int y = instance.ActiveTab.FullEmulationMouseCurrentPosition.Y;
//перетаскивание элементов
instance.ActiveTab.FullEmulationMouseDragAndDrop(he, he);
//перемещение мыши по координатам
instance.ActiveTab.FullEmulationMouseMove(150, 100);
//читаем нужный текст
instance.ActiveTab.FullEmulationMouseMoveAboveHtmlElement(he, 150);
//перемещение мыши к заданному html элементу
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);
//установка положения курсора во время прокрутки страницы
instance.ActiveTab.FullEmulationMouseSetScrollBorder(10, 100);
//прокрутка колёсиком мыши
instance.ActiveTab.FullEmulationMouseWheel(he, 50, 0);
//где 50 область видимости элемента на странице при прокрутке вертикально, а 0 - горизонтальноЭмуляция клавиатуры.
instance.ActiveTab.KeyEvent("A", "press", "ctrl");
//Ввод CTRL + A (выделить текст)instance.ActiveTab.KeyEvent("Back", "press", "");
//Нажатие Backspace (удаление)instance.Sendtext(text, 50);//Ввод текста из переменной с задержкой 50 между буквами.
Можно так
instance.SendText("текст", 50);
Но я обычно с помощью instance.ActiveTab.SetValue("true", "SuperEmulation", true, false); ввожу текст эмулированный.
instance.SendText("{ENTER}", 1);
эмуляция нажатия Enterinstance.SendText("{DOWN}", 1);
{UP} {LEFT} {RIGHT} - стрелкиЕсли нужно просто нажать на кнопку
instance.ActiveTab.KeyEvent("A", "press", "");
плавный ввод текстаinstance.ActiveTab.FindElementByAttribute("input:text", "name", "username","text", 0).SetValue(login, "SuperEmulation", true, false);
instance
.ActiveTab.MainDocument.EvaluateScript("window.location.reload(true)"); //f5Цветной лог:
project.SendToLog("Мой текст", ZennoLab.InterfacesLibrary.Enums.Log.LogType.Info, true, ZennoLab.InterfacesLibrary.Enums.Log.LogColor.Blue);👍1
Остановка работы шаблона:
ZennoPoster.StopTask(Guid.Parse(project.TaskId));Получить заданное количество случайных строк из зенно списка (с удалением) в строковую переменную, через запятую:
var lstItems = project.Lists["ItemsList"];
int numb = 3;
string items = String.Join(", ", lstItems.GetItems("random" + numb, true).ToList());
Сниппет, который кладёт файлы в список (по указанному формату), и затем в переменную записывает строку с удалением её из списка.//кладём все файлы в директории в список
var List_1 = project.Lists["subdir"]; //список, куда будут собираться файлы
string supportedExtensions_1 = "*.jpg"; //тут укажите формат файлов, которые будут собираться
foreach (string imageFile in Directory.GetFiles($"C:\\Users\\Administrator\\Desktop\\1nh video\\House\\{zagolovok}\\kart\\", "*.*", SearchOption.AllDirectories).Where(s => supportedExtensions.Contains(Path.GetExtension(s).ToLower())))
{
List_1.Add(imageFile);
}
//получаем случайный файл в переменную
int numb = 1;
string ite_1 = String.Join(", ", List_1.GetItems("random" + numb, true).ToList());
Получаем секунды и миллисекунды:
string unixsec = DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString();
string tabtime = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();Конвертация из string в int
string s = "123";
int i = int.Parse(s);
int number = int.Parse("42"); //Из строки в число
string numString = 42.ToString(); // Из числа в строку
str.Substring(0,5) - возьмёт символы от нулевого до пятого. (взять символы от и до)
Удаление пробелов из строковой переменной:
string str = project.Variables["nomer_sparsenniy"].Value;
str = str.Replace(" ", string.Empty);
Проверка с помощью Xpath элемента на странице и возврат либо через Boolean либо значением в переменную.
Forwarded from 🧬SHILY🧬
Вот кароч оба варианта:
string str_result = instance.ActiveTab.FindElementByXPath("//input[@id='index_email']", 0).GetAttribute("name") != "" ? "Элемент есть на страничке" : "Ля, нить элемента";
bool bool_result = instance.ActiveTab.FindElementByXPath("//input[@id='index_email']", 0).GetAttribute("name") != "" ? true : false;
project.SendInfoToLog(bool_result.ToString() + " - " + str_result);Forwarded from 🧬SHILY🧬
GetAttribute("name") - а тут укажи какой атрибут брать: name, class и т.д.Возврат на предыдущую страницу
instance.ActiveTab.MainDocument.EvaluateScript("javascript:history.back()");
Дождаться прогрузки страницы:instance.ActiveTab.WaitDownloading();
первые строчки c# кода здесь это преобразованный в код кубик "Парсить данные". Остальное сохраняет спарсенное в переменную или список
Forwarded from 🧬SHILY🧬
Вот так можешь попробовать:
Tab tab = instance.ActiveTab;
if (tab.IsVoid || tab.IsNull) return -1;
// Получаем атрибут "innerText" всех элементов, соответствующих пути "html>body>div>div>div>div>div>h3"
var attributes = ZennoPoster.Parser.ParseByCssSelector(tab, ZennoLab.InterfacesLibrary.Enums.Parser.SourceType.Dom, "html>body>div>div>div>div>div>h3", "innerText", true).ToList();
// Фильтруем элементы
attributes.Filter(ZennoLab.InterfacesLibrary.Enums.Parser.FilterType.None, "");
// Выбираем элементы из диапазона "all"
attributes.Range("all");
//Сейв в переменную с переносом на новую строку (если без переноса, то убери \n)
project.Variables["result"].Value = String.Join("\n", attributes);
//Сейв в список
project.Lists["мой список"].Clear(); // предварительная очистка списка
project.Lists["мой список"].AddRange(attributes);Forwarded from 🧬SHILY🧬
Ток создай такой список в зенке самой, если что, если нужно в список результат "
мой список"\(.*- Удалить скобки и всё содержимое в них. Если поставить вместо ( точку, то всё после точки удалится.
project.Variables["result"].Value = Regex.Replace(project.Variables["text"].Value, @"<br></br>.*?", Environment.NewLine);
Замена <br></br> на перенос строкиForwarded from 🧬SHILY🧬
Я никогда ещё не делал так, но сейчас написал и проверил на своём примере - работает:
//Получаем элемент
(первое совпадение)
HtmlElement _elClick = instance.ActiveTab.FindElementByXPath("//li[@class='serp-item']", 0);
//Проверяем элемент
if (_elClick.IsNull || _elClick.IsVoid) throw new Exception("Элемент не найден, бро");
//Наводим мышкой на элемент
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(_elClick);
//Кликаем по элементу левой клавишей
instance.ActiveTab.FullEmulationMouseClick("left", "click");А если нужно не нажать на элемент, а вставить текст, то:
_elClick.SetValue("ghj", "Full", true, false);Forwarded from 🧬SHILY🧬
Это ты меня по обработке ошибки просил:
//Создаем переменную таб и наделяем её магическими свойствами активной вкладки инстанса
Tab tab1 = instance.ActiveTab;
//Инициализируем переменную - счетчик
int _countIterationError = 0;
//Идем на сайт
tab1.Navigate("ya.ru");
//Ожидаем полной загрузки сайта
tab1.WaitDownloading();
/*
Цикл, который будет отробатывать 5-ть раз до ошибки (если быть точным, то упадет в исключение)
Туда можно впихнуть повторый переход на сайт или ещё что-то, всё от задачи зависит кароч.
*/
while (true)
{
//Проверяем урл на "about:blank" (если не равно, то сразу выходим из цикла)
if (tab1.URL != "about:blank") break;
//Таймаут в миллисекундах
Thread.Sleep(1000);
//Чек на количество ошибок (если ошибок больше 5-ти, то выкидывать исключение)
if (++_countIterationError > 5) throw new Exception("Слишком много ошибок");
}Forwarded from 🧬SHILY🧬
Если тебе что-то конкретное надо, по типу:
если "about:blank", то пробовать перейти ещё раз пять на тот же сайт (куда топали изначально), если пять ошибок, то идти на другой сайт, если тоже самое (тоже 5-ть ошибок), то бросать исключение.Поиск элемента > проверка найден ли элемент > клик на элемент > проверка нажатия кнопки