Движение курсора к картинке

Gavich

Client
Регистрация
29.06.2016
Сообщения
46
Благодарностей
3
Баллы
8
Есть обрасть на странице которую очень сложно идентифицировать селекторами, но довольно легко по картинке. Для человекоподобности нужно перед кликом подвести курсор к нужному месту. Как в zennoposter вместо "Клик по картинке" узнать координаты области чтобы сначала подвести мышку?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 239
Благодарностей
9 871
Баллы
113
Есть обрасть на странице которую очень сложно идентифицировать селекторами, но довольно легко по картинке. Для человекоподобности нужно перед кликом подвести курсор к нужному месту. Как в zennoposter вместо "Клик по картинке" узнать координаты области чтобы сначала подвести мышку?
Можете узнать координаты через leftinbrowser и topinbrowser, в конструкторе действий их нет, просто впишите вручную.
 

Dmitriy_Zenno

Administrator
Регистрация
28.10.2025
Сообщения
76
Благодарностей
38
Баллы
18
Есть обрасть на странице которую очень сложно идентифицировать селекторами, но довольно легко по картинке. Для человекоподобности нужно перед кликом подвести курсор к нужному месту. Как в zennoposter вместо "Клик по картинке" узнать координаты области чтобы сначала подвести мышку?
Здравствуйте,

Тут нужно использовать C#.
Можете получить его со всеми нужными настройками из кубика (скрин).
И добавить одну строчку tab.FullEmulationMouseMove(rectangle.X, rectangle.Y);
Поставить ее нужно будет перед tab.RiseEvent("click", rectangle, "Left"); это и есть наш клик

Пример:
C#:
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
Document mainDocument = tab.MainDocument;
if (mainDocument.IsVoid) return -1;
ResourceManager rm = new System.Resources.ResourceManager("", System.Reflection.Assembly.GetExecutingAssembly());
string rectangleString = tab.FindImage(rm.GetString(""), new[] { new Rectangle(0, 0, mainDocument.Width, mainDocument.Height) }, 99);
if (!String.IsNullOrWhiteSpace(rectangleString))
{
    string[] split = rectangleString.Split(',');
    Rectangle rectangle = new System.Drawing.Rectangle(System.Convert.ToInt32(split[0].Trim()), System.Convert.ToInt32(split[1].Trim()), System.Convert.ToInt32(split[2].Trim()), System.Convert.ToInt32(split[3].Trim()));
    if (!rectangle.IsEmpty)
    {
        rectangle = new System.Drawing.Rectangle(rectangle.X + 24, rectangle.Y + 20, 6, 6);
        // Вызвать событие "click" для Left
        tab.FullEmulationMouseMove(rectangle.X, rectangle.Y); // Добавить сюда
        tab.RiseEvent("click", rectangle, "Left");
        System.Threading.Thread.Sleep(500);
        if (tab.IsBusy) tab.WaitDownloading();
    }
    else return -1;
}
else return -1;

137467

Если будет ошибка ResourceManager
Нужно будет добавить такую настройку using System.Resources;

137468
 
Последнее редактирование:

Gavich

Client
Регистрация
29.06.2016
Сообщения
46
Благодарностей
3
Баллы
8
Здравствуйте,

Тут нужно использовать C#.
Можете получить его со всеми нужными настройками из кубика (скрин).
И добавить одну строчку tab.FullEmulationMouseMove(rectangle.X, rectangle.Y);
Поставить ее нужно будет перед tab.RiseEvent("click", rectangle, "Left"); это и есть наш клик

Пример:
C#:
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
Document mainDocument = tab.MainDocument;
if (mainDocument.IsVoid) return -1;
ResourceManager rm = new System.Resources.ResourceManager("", System.Reflection.Assembly.GetExecutingAssembly());
string rectangleString = tab.FindImage(rm.GetString(""), new[] { new Rectangle(0, 0, mainDocument.Width, mainDocument.Height) }, 99);
if (!String.IsNullOrWhiteSpace(rectangleString))
{
    string[] split = rectangleString.Split(',');
    Rectangle rectangle = new System.Drawing.Rectangle(System.Convert.ToInt32(split[0].Trim()), System.Convert.ToInt32(split[1].Trim()), System.Convert.ToInt32(split[2].Trim()), System.Convert.ToInt32(split[3].Trim()));
    if (!rectangle.IsEmpty)
    {
        rectangle = new System.Drawing.Rectangle(rectangle.X + 24, rectangle.Y + 20, 6, 6);
        // Вызвать событие "click" для Left
        tab.FullEmulationMouseMove(rectangle.X, rectangle.Y); // Добавить сюда
        tab.RiseEvent("click", rectangle, "Left");
        System.Threading.Thread.Sleep(500);
        if (tab.IsBusy) tab.WaitDownloading();
    }
    else return -1;
}
else return -1;

Посмотреть вложение 137467

Если будет ошибка ResourceManager
Нужно будет добавить такую настройку using System.Resources;

Посмотреть вложение 137468
Спасибо. Такой вариант пробовал, но не получилось из-за того что не могу получить доступ к картинке которую скринит ZennoPoster. А если делать скрин самому то картинку просто не находит. У Вас все получалось?
 

Dmitriy_Zenno

Administrator
Регистрация
28.10.2025
Сообщения
76
Благодарностей
38
Баллы
18
Спасибо. Такой вариант пробовал, но не получилось из-за того что не могу получить доступ к картинке которую скринит ZennoPoster. А если делать скрин самому то картинку просто не находит. У Вас все получалось?
Извиняюсь, действительно решение из кубика не работает, его нужно подправить. Сообщу про этот момент разработчикам!

Нужно поправить код:
Удаляем строчку ResourceManager rm = new System.Resources.ResourceManager("", System.Reflection.Assembly.GetExecutingAssembly());
using System.Resources; нам тоже не понадобится.

Теперь нужно перевести в Base64 картинку, которую ищем. Я использовал этот сайт
И вот так добавляем в код

C#:
var img = "iVBORw0K**********";
string rectangleString = tab.FindImage(img, new[] { new Rectangle(0, 0, mainDocument.Width, mainDocument.Height) }, 95);
Должно получиться:
C#:
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
Document mainDocument = tab.MainDocument;
if (mainDocument.IsVoid) return -1;

var img = "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALgSURBVGhD7ZlbaxNBFID9NYqoD+qD4IuoKApe8IKI+tg++CyiP8FLqYhoa9VarRYa8aWaR2MTME2oJopaITEXlaBNttmkue0lyXHP7KyYxLbZ2UniQD44Dz3Z3flmOmdmslkHTWiaBslkEhKJxIohSRK9uhFZlhuui8ViEIlE1oxoNNqSi8fjDc9KpVKkjXQ6Tf5uEf+fwQ56PB4SQomHw+G+eFcRVhyLNhAIkBBKHFczIUe8UCiIKa7rupjiiLDifr+fBHfxTLEOxx7KcPZpjmb40pERXyzUYO/oEqy/koHjEzLN8oW7OI70nhFT+uC9LEilOv2EL1zFUfHouEykrdhxU4JBVx6GvSV4FVWhyqkfHRdvjpOPZPiRq5k3OMDr9ZLgOlX23c0SyQNjWYgvVWH+uwZToQqcemx2astQBlwfKvQONriOuAUWpyV/4q/irBn/krFAGTZeNUd/xF+in9inI+IIyuOIn55sXVU+/tRh83VTfu6bRrP26Jj4Wky/rxDxww+yNGOPnokjOI1Q3huzP+o9FX/yzhz1S+5lmmmfnopHM1UijhuVXZjFzxhnkHNTzs4hRbVOxLff+PdrjtVgFt95SyKNpovsm0lBMcW3DtsX9/l8JGyLD7hypFGWwrL49Evv/lQZmi2SRkfnyjRjn9tvSuQZF190sTjdCwppdLdxEtSqNGkD3Zhhu+6Yp0j3F4Vm24dZXNEB9tNtHUffLpNvzaUQn6EydJxZHFlY1GHTtQxsMARwG28X6z4UxwMYC/huBV8MMYkjE/NlIoArw+xXlWZXBs/keC3ecz/IXh8WzOKIVWQY55/n4bXRAZzDFlgDKDz4LP/nOryHB47EERxtq9hWC/xa54uzL6HNOBZHsMhmPitwYWYZDhmnPpwS24xd8ch4Fi4b55GXxkqkOf/y0wAX8V7QF+82ffFuI5y4kD8XorCjs0qvEPbHq1AoJJ64qqoQDAapuAd+A6bfq3B2xhpTAAAAAElFTkSuQmCC";
string rectangleString = tab.FindImage(img, new[] { new Rectangle(0, 0, mainDocument.Width, mainDocument.Height) }, 95);
if (!String.IsNullOrWhiteSpace(rectangleString))
{
    string[]split = rectangleString.Split(',');
    Rectangle rectangle = new System.Drawing.Rectangle(System.Convert.ToInt32(split[0].Trim()), System.Convert.ToInt32(split[1].Trim()), System.Convert.ToInt32(split[2].Trim()), System.Convert.ToInt32(split[3].Trim()));
    if (!rectangle.IsEmpty)
    {
        rectangle = new System.Drawing.Rectangle(rectangle.X + 22, rectangle.Y + 22, 6, 6);
        // Вызвать событие "click" для Left
        tab.FullEmulationMouseMove(rectangle.X, rectangle.Y);
        tab.RiseEvent("click", rectangle, "Left");
        System.Threading.Thread.Sleep(500);
        if (tab.IsBusy) tab.WaitDownloading();
    }
    else return -1;
}
else return -1;
Проверил у себя, все работает.
 
Последнее редактирование:

Gavich

Client
Регистрация
29.06.2016
Сообщения
46
Благодарностей
3
Баллы
8
Извиняюсь, действительно решение их кубика не работает, его нужно подправить. Сообщу про этот момент разработчикам!

Нужно поправить код:
Удаляем строчку ResourceManager rm = new System.Resources.ResourceManager("", System.Reflection.Assembly.GetExecutingAssembly());
using using System.Resources; нам тоже не понадобится.

Теперь нужно перевести в Base64 картинку, которую ищем. Я использовал этот сайт
И вот так добавляем в код

C#:
var img = "iVBORw0K**********";
string rectangleString = tab.FindImage(img, new[] { new Rectangle(0, 0, mainDocument.Width, mainDocument.Height) }, 95);
Должно получиться:
C#:
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
Document mainDocument = tab.MainDocument;
if (mainDocument.IsVoid) return -1;

var img = "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAsCAYAAAAacYo8AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALgSURBVGhD7ZlbaxNBFID9NYqoD+qD4IuoKApe8IKI+tg++CyiP8FLqYhoa9VarRYa8aWaR2MTME2oJopaITEXlaBNttmkue0lyXHP7KyYxLbZ2UniQD44Dz3Z3flmOmdmslkHTWiaBslkEhKJxIohSRK9uhFZlhuui8ViEIlE1oxoNNqSi8fjDc9KpVKkjXQ6Tf5uEf+fwQ56PB4SQomHw+G+eFcRVhyLNhAIkBBKHFczIUe8UCiIKa7rupjiiLDifr+fBHfxTLEOxx7KcPZpjmb40pERXyzUYO/oEqy/koHjEzLN8oW7OI70nhFT+uC9LEilOv2EL1zFUfHouEykrdhxU4JBVx6GvSV4FVWhyqkfHRdvjpOPZPiRq5k3OMDr9ZLgOlX23c0SyQNjWYgvVWH+uwZToQqcemx2astQBlwfKvQONriOuAUWpyV/4q/irBn/krFAGTZeNUd/xF+in9inI+IIyuOIn55sXVU+/tRh83VTfu6bRrP26Jj4Wky/rxDxww+yNGOPnokjOI1Q3huzP+o9FX/yzhz1S+5lmmmfnopHM1UijhuVXZjFzxhnkHNTzs4hRbVOxLff+PdrjtVgFt95SyKNpovsm0lBMcW3DtsX9/l8JGyLD7hypFGWwrL49Evv/lQZmi2SRkfnyjRjn9tvSuQZF190sTjdCwppdLdxEtSqNGkD3Zhhu+6Yp0j3F4Vm24dZXNEB9tNtHUffLpNvzaUQn6EydJxZHFlY1GHTtQxsMARwG28X6z4UxwMYC/huBV8MMYkjE/NlIoArw+xXlWZXBs/keC3ecz/IXh8WzOKIVWQY55/n4bXRAZzDFlgDKDz4LP/nOryHB47EERxtq9hWC/xa54uzL6HNOBZHsMhmPitwYWYZDhmnPpwS24xd8ch4Fi4b55GXxkqkOf/y0wAX8V7QF+82ffFuI5y4kD8XorCjs0qvEPbHq1AoJJ64qqoQDAapuAd+A6bfq3B2xhpTAAAAAElFTkSuQmCC";
ResourceManager rm = new System.Resources.ResourceManager("", System.Reflection.Assembly.GetExecutingAssembly());
string rectangleString = tab.FindImage(img, new[] { new Rectangle(0, 0, mainDocument.Width, mainDocument.Height) }, 95);
if (!String.IsNullOrWhiteSpace(rectangleString))
{
    string[]split = rectangleString.Split(',');
    Rectangle rectangle = new System.Drawing.Rectangle(System.Convert.ToInt32(split[0].Trim()), System.Convert.ToInt32(split[1].Trim()), System.Convert.ToInt32(split[2].Trim()), System.Convert.ToInt32(split[3].Trim()));
    if (!rectangle.IsEmpty)
    {
        rectangle = new System.Drawing.Rectangle(rectangle.X + 22, rectangle.Y + 22, 6, 6);
        // Вызвать событие "click" для Left
        tab.FullEmulationMouseMove(rectangle.X, rectangle.Y);
        tab.RiseEvent("click", rectangle, "Left");
        System.Threading.Thread.Sleep(500);
        if (tab.IsBusy) tab.WaitDownloading();
    }
    else return -1;
}
else return -1;
Проверил у себя, все работает.
Оно, перевести в Base64 картинку - то чего мне не хватало.
 
  • Спасибо
Реакции: Dmitriy_Zenno

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)