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

  • Автор темы Автор темы Gavich
  • Дата начала Дата начала

Gavich

Client
Регистрация
29.06.2016
Сообщения
65
Реакции
7
Баллы
8
Есть обрасть на странице которую очень сложно идентифицировать селекторами, но довольно легко по картинке. Для человекоподобности нужно перед кликом подвести курсор к нужному месту. Как в zennoposter вместо "Клик по картинке" узнать координаты области чтобы сначала подвести мышку?
 
Есть обрасть на странице которую очень сложно идентифицировать селекторами, но довольно легко по картинке. Для человекоподобности нужно перед кликом подвести курсор к нужному месту. Как в zennoposter вместо "Клик по картинке" узнать координаты области чтобы сначала подвести мышку?
Можете узнать координаты через leftinbrowser и topinbrowser, в конструкторе действий их нет, просто впишите вручную.
 
Есть обрасть на странице которую очень сложно идентифицировать селекторами, но довольно легко по картинке. Для человекоподобности нужно перед кликом подвести курсор к нужному месту. Как в 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
 
Последнее редактирование:
Здравствуйте,

Тут нужно использовать 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. А если делать скрин самому то картинку просто не находит. У Вас все получалось?
 
Спасибо. Такой вариант пробовал, но не получилось из-за того что не могу получить доступ к картинке которую скринит 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;

Проверил у себя, все работает.
 
Последнее редактирование:
Извиняюсь, действительно решение их кубика не работает, его нужно подправить. Сообщу про этот момент разработчикам!

Нужно поправить код:
Удаляем строчку 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

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