Это у меня так потомок от общего кода называется, там где не заметил, можно убрать CC - будет работать.Интересно что такое CC.rnd, а именно СС ?
Это у меня так потомок от общего кода называется, там где не заметил, можно убрать CC - будет работать.Интересно что такое CC.rnd, а именно СС ?
Прибавляй к координатам по половине ширины/высоты элемента.
СпасибоКод не много не причесан, прошу понять и простить.
Подробная инструкция в коде - в комментариях.
Кратко: - вызываем из кубика FullEmulMoveToCenterOfElm - прописываем, все что подсказывает компилятор и радуемся жизни. )
C#:/// <summary> /// rnd - Случайное число в диапазоне от start до end /// </summary> /// <param name="start">Меньшее число</param> /// <param name="end">Большее число</param> /// <returns>Число</returns> public static int rnd (int start=0, int end=100) { Random rnd = new Random(); return rnd.Next(start, end); } /// <summary> /// Двигает мышь к центру элемента методом FullEmulationMouseMove, с некоторым смещением /// </summary> /// <param name="instance">Инстанс</param> /// <param name="targetElem"> Целевой HtmlElement</param> /// <param name="deltaZero"> При true двигает точно к центру элемента, иначе к точке, которая смещена от центра элемента на случайное расстояние </param> /// <param name="click"> Кликает на элементе если true, default - false </param> /// <returns></returns> public static void FullEmulMoveToCenterOfElm(Instance instance, ZennoLab.CommandCenter.HtmlElement targetElem, bool deltaZero = false, bool click = false){ Tab tab = instance.ActiveTab; int windheight = int.Parse(tab.MainDocument.EvaluateScript("return window.innerWidth;")); Point xyhe = targetElem.DisplacementInBrowser; Point curXY = tab.FullEmulationMouseCurrentPosition; int elemWidth = targetElem.BoundingClientWidth; int elemHeight = targetElem.BoundingClientHeight; if (xyhe.Y + elemHeight >= windheight) { tab.FullEmulationMouseWheel(0, CC.rnd(elemHeight + 120, elemHeight + 170)); } if (xyhe.Y <= 10) { tab.FullEmulationMouseWheel(0, -1 * CC.rnd(elemHeight + 20, elemHeight + 70)); } int deltaX = (int) Math.Ceiling((double) elemWidth * 0.23); int deltaY = (int) Math.Ceiling((double) elemHeight * 0.15); int sharpTrgX = xyhe.X + elemWidth/2; deltaX = sharpTrgX - curXY.X >= 0 ? CC.rnd(-4,deltaX): CC.rnd(-1*deltaX,4); if (deltaZero) { deltaX = 0; deltaY = 0; } int targetX = sharpTrgX - deltaX; int targetY = xyhe.Y + elemHeight/2 + CC.rnd(-1*deltaY,deltaY); tab.FullEmulationMouseMove(targetX, targetY); tab.FullEmulationMouseMove(targetX+1, targetY); if (click) tab.FullEmulationMouseClick("left", "click"); }
Random regRandom = new Random();
Tab Tab1 = instance.ActiveTab;
//Переходим на сайт
Tab1.Navigate("http://www.i.ua");
Tab1.WaitDownloading();
Thread.Sleep(regRandom.Next(3500, 5500));//пауза
//Находим select
HtmlElement selDom = Tab1.FindElementByName("domn");
//Получаем координаты
string elDayleft = selDom.GetAttribute("leftInTab");
string elDaytop = selDom.GetAttribute("topInTab");
//Перемещаем и кликаем
Tab1.FullEmulationMouseMove(Int32.Parse(elDayleft) + 10,Int32.Parse(elDaytop) + 10);
Thread.Sleep(regRandom.Next(500, 2500));
Tab1.FullEmulationMouseClick("left", "click");
Thread.Sleep(regRandom.Next(1000, 2500));
//Перемещаем чуть ниже и кликаем
Tab1.FullEmulationMouseMove(Int32.Parse(elDayleft) + 10,Int32.Parse(elDaytop) + 55);
Thread.Sleep(regRandom.Next(500, 2500));
Tab1.FullEmulationMouseClick("left", "click");
Thread.Sleep(regRandom.Next(1000, 2500));
Наверное никак, это баг. Репортить в баги, мб пофиксят...Клик происходит как бы под списком.
Кто подскажет как кликать по option - нам в select с помощью мышки.
Помогите плз.
Кто подскажет как кликать по option - нам в select с помощью мышки.
Наверное никак, это баг. Репортить в баги, мб пофиксят...
Зарепортил баг.Это баг зенки
Вроде все понятно, но почему-то отказывается работать, выдает ошибку "CSharp OwnCode Входная строка имела неверный формат.". Вызываю вот так:Код не много не причесан, прошу понять и простить.
Подробная инструкция в коде - в комментариях.
Кратко: - вызываем из кубика FullEmulMoveToCenterOfElm - прописываем, все что подсказывает компилятор и радуемся жизни. )
UPD: Убрал в коде пару лишних символов.C#:/// <summary> /// rnd - Случайное число в диапазоне от start до end /// </summary> /// <param name="start">Меньшее число</param> /// <param name="end">Большее число</param> /// <returns>Число</returns> public static int rnd (int start=0, int end=100) { Random rnd = new Random(); return rnd.Next(start, end); } /// <summary> /// Двигает мышь к центру элемента методом FullEmulationMouseMove, с некоторым смещением /// </summary> /// <param name="instance">Инстанс</param> /// <param name="targetElem"> Целевой HtmlElement</param> /// <param name="deltaZero"> При true двигает точно к центру элемента, иначе к точке, которая смещена от центра элемента на случайное расстояние </param> /// <param name="click"> Кликает на элементе если true, default - false </param> /// <returns></returns> public static void FullEmulMoveToCenterOfElm(Instance instance, ZennoLab.CommandCenter.HtmlElement targetElem, bool deltaZero = false, bool click = false){ Tab tab = instance.ActiveTab; int windheight = int.Parse(tab.MainDocument.EvaluateScript("return window.innerWidth;")); Point xyhe = targetElem.DisplacementInBrowser; Point curXY = tab.FullEmulationMouseCurrentPosition; int elemWidth = targetElem.BoundingClientWidth; int elemHeight = targetElem.BoundingClientHeight; if (xyhe.Y + elemHeight >= windheight) { tab.FullEmulationMouseWheel(0, rnd(elemHeight + 120, elemHeight + 170)); } if (xyhe.Y <= 10) { tab.FullEmulationMouseWheel(0, -1 * rnd(elemHeight + 20, elemHeight + 70)); } int deltaX = (int) Math.Ceiling((double) elemWidth * 0.23); int deltaY = (int) Math.Ceiling((double) elemHeight * 0.15); int sharpTrgX = xyhe.X + elemWidth/2; deltaX = sharpTrgX - curXY.X >= 0 ? rnd(-4,deltaX): CC.rnd(-1*deltaX,4); if (deltaZero) { deltaX = 0; deltaY = 0; } int targetX = sharpTrgX - deltaX; int targetY = xyhe.Y + elemHeight/2 + rnd(-1*deltaY,deltaY); tab.FullEmulationMouseMove(targetX, targetY); tab.FullEmulationMouseMove(targetX+1, targetY); if (click) tab.FullEmulationMouseClick("left", "click"); }
HtmlElement he = instance.ActiveTab.GetDocumentByAddress("-1").FindElementByAttribute("a", "href", "news", "regexp", 19);
CenterClick.FullEmulMoveToCenterOfElm(instance, he, false, false);
Попробуй в отладчике прогнать.Что я не так делаю?
int windheight = int.Parse(tab.MainDocument.EvaluateScript("return window.innerWidth;"));
int windheight = int.Parse(tab.MainDocument.EvaluateScript("return window.innerWidth;", true));
Ошибка вылезает при выполнении строки "int windheight = int.Parse(tab.MainDocument.EvaluateScript("return window.innerWidth;"));".Попробуй в отладчике прогнать.
Скорей всего не срабатывает определение ширины окна в собственном коде.
C#:int windheight = int.Parse(tab.MainDocument.EvaluateScript("return window.innerWidth;"));
Попробуй, так сделать
C#:int windheight = int.Parse(tab.MainDocument.EvaluateScript("return window.innerWidth;", true));
Ошибка вылезает при выполнении строки "int windheight = int.Parse(tab.MainDocument.EvaluateScript("return window.innerWidth;"));".
Если просто заменить строку на указанную Вами, получаю ошибку "CSharp OwnCode Script Error: Error: call to eval() blocked by CSP".
Версия 5.27.1.0.
instance.SetBrowserPreference("security.csp.enable", false);
Спасибо, заработалоВот и ответ.
Способ устранения:
В шаблоне перед всеми загрузками страниц, нужно выполнить кубик
C#:instance.SetBrowserPreference("security.csp.enable", false);
Решение легко ищется на форуме - такая же пилюля
Заценим 
Можно попробовать активировать меню-список и выполнять код:А кто нибудь подскажет, как скролить не саму страницу, а выпадающий список?
instance.WaitFieldEmulationDelay();
instance.SendText("{DOWN}", 15);
Вроде решил вопрос, мышку в поле списка завести, и срабатывает.. А не подскажете, чистить куки и кеш надо кубиками?, в настройках проекта и настройках записи проекта галки стоятМожно попробовать активировать меню-список и выполнять код:
Код:instance.WaitFieldEmulationDelay(); instance.SendText("{DOWN}", 15);
Вроде решил вопрос, мышку в поле списка завести, и срабатывает.. А не подскажете, чистить куки и кеш надо кубиками?, в настройках проекта и настройках записи проекта галки стоят

Что то про куки ен совсем понял, если галка стоит, то будкт очищаться автоматом, если нет, то только после кубика, если он есть в проекте, так?.. кубик при создании шаблона не создается автоматом ни с галкой, ни без галкиКеш не обязательно, раз стоит галка в настройках шаблона.
Насчет кубика очистки куков, если галку в Настройках ПМ снимете, то кубик не будет создаваться при создании шаблона.
Посмотреть вложение 37185
Что то про куки ен совсем понял, если галка стоит, то будкт очищаться автоматом, если нет, то только после кубика, если он есть в проекте, так?.. кубик при создании шаблона не создается автоматом ни с галкой, ни без галки

Понял, спасибоС галкой в настройках кубик очистки куков должен создаваться при создании нового проекта, если создавать его c активной Записью:
Посмотреть вложение 37191
Если кубика очистки куков на полотне проекта нет, то очистки куков не будет.
Если у кого-то возникнут такие же проблемы, то решение оказалось простым, нужно увеличить размер окна инстанса, что бы все элементы были в видимой области. instance.SetWindowSize(1920, 1680); // можно вставить свое значение вместо 1920, 1680Подскажите как решить проблему с эмуляцией мыши. Проблема в том, что если выполнять шаблон в ЗП и не включить отображение инстанса, то эмуляция кликов по нужным элементам не происходит (если включить отображение инстанса то все ок). Тоже самое и в ПМ, если клик по элементу происходит за пределами видимой области (прокрутка лево право в браузере ПМ), то клик по элементу не происходит.
Какой поисковик?Приветствую. Оч интересная тема. Как сделать 1) поиск нужного урла в поисковой выдаче? 2) затем клик по нему? Не соображу как переменные куда подставить.. Может подскажете строчку кода?
HtmlElement he = instance.ActiveTab.FindElementByAttribute("a", "href", "https://ru.wikipedia.org", "regexp", 0);//находим элемент по УРЛу
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);//двигаем мышку к нему
System.Threading.Thread.Sleep(500);//ждем пол секунды перед нажатием
instance.ActiveTab.FullEmulationMouseClick("left", "click");//ЛКМ по ссылке
Поисковик яндекс, но думаю принцип тот же, что вы указали) СпасибоКакой поисковик?
Для Google'а такой сниппет работает, правда не знаю насколько хорошо.
Код:HtmlElement he = instance.ActiveTab.FindElementByAttribute("a", "href", "https://ru.wikipedia.org", "regexp", 0);//находим элемент по УРЛу instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);//двигаем мышку к нему System.Threading.Thread.Sleep(500);//ждем пол секунды перед нажатием instance.ActiveTab.FullEmulationMouseClick("left", "click");//ЛКМ по ссылке
Главное правильно найти элемент по атрибуту. А там подставляете три строчки последние.Поисковик яндекс, но думаю принцип тот же, что вы указали) Спасибо
Поисковик яндекс, но думаю принцип тот же, что вы указали) Спасибо
Random rand = new Random();//переменная для рандома
HtmlElementCollection hes = instance.ActiveTab.GetDocumentByAddress("0").FindElementsByAttribute("div","class","organic__url-text","regexp");//берем все элементы
HtmlElement he;//переменная для будущего элемента
int i = 0;//счетчик
do{
int url = rand.Next(0, hes.Count);//выбираем совпадение элемента рандомно
i++;
he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("div","class","organic__url-text","regexp", url);//берем элемент
if (Convert.ToInt32(he.GetAttribute("leftInTab")) <= 0 && Convert.ToInt32(he.GetAttribute("topInTab")) <= 0){//если элемент не находится в поле видимости
continue;//если да, то продолжаем искать
}
else{
break;//если нет, то выходим из цикла
}
}
while (i!=100);//пока не будет "100", не выходим из цикла
instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);//наводим мышь на элемент
System.Threading.Thread.Sleep(rand.Next(500, 1000));//случайно ждем время до клика от 0.5 секунды до 1й
instance.ActiveTab.FullEmulationMouseClick("left", "click");//нажимает левой кнопкой мыши на элемент
Благодарю. Вместе урла, где википедия стоит, можно свою переменную подставить, чтобы урл брался из файла?На случай, если нужен рандомный клик.Код:Random rand = new Random();//переменная для рандома HtmlElementCollection hes = instance.ActiveTab.GetDocumentByAddress("0").FindElementsByAttribute("div","class","organic__url-text","regexp");//берем все элементы HtmlElement he;//переменная для будущего элемента int i = 0;//счетчик do{ int url = rand.Next(0, hes.Count);//выбираем совпадение элемента рандомно i++; he = instance.ActiveTab.GetDocumentByAddress("0").FindElementByAttribute("div","class","organic__url-text","regexp", url);//берем элемент if (Convert.ToInt32(he.GetAttribute("leftInTab")) <= 0 && Convert.ToInt32(he.GetAttribute("topInTab")) <= 0){//если элемент не находится в поле видимости continue;//если да, то продолжаем искать } else{ break;//если нет, то выходим из цикла } } while (i!=100);//пока не будет "100", не выходим из цикла instance.ActiveTab.FullEmulationMouseMoveToHtmlElement(he);//наводим мышь на элемент System.Threading.Thread.Sleep(rand.Next(500, 1000));//случайно ждем время до клика от 0.5 секунды до 1й instance.ActiveTab.FullEmulationMouseClick("left", "click");//нажимает левой кнопкой мыши на элемент
Да.Благодарю. Вместе урла, где википедия стоит, можно свою переменную подставить, чтобы урл брался из файла?
Если правильно понимаю, то нужно так сделать: "project.Variables["domen"].Value". Так можно подставить?


