Смотрите видео ниже, чтобы узнать, как установить наш сайт в качестве веб-приложения на домашнем экране.
Примечание: Эта возможность может быть недоступна в некоторых браузерах.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Задача найти и кликнуть по картинке
Подскажите пожалуйста как можно подставить свою картинку и кликнуть по ней ?
Есть проблема с одним сайтом, при нажатии на "Поиск по картинке" он мигает и нормально фото PM сделать не может
Задача найти и кликнуть по картинке
Подскажите пожалуйста как можно подставить свою картинку и кликнуть по ней ?
Есть проблема с одним сайтом, при нажатии на "Поиск по картинке" он мигает и нормально фото PM сделать не может
Чтобы убрать мигание достаточно наверно увеличит размер окна браузера.
Происходить мигание может потому, что стили сайта пытаются переключаться между медиа запросами CSS.
Если этого не достаточно, чтобы решить проблему (ну, например на сайте просто анимация), тогда мы должны сделать скриншот нужного элемента самостоятельно. В идеальном случае необходимо сохранить в bmp, и убедиться что не были применены какие-то алгоритмы сжатия (намучался однажды с этим, так как jpg по умолчанию сжимается...).
Дальше уже этот скриншот нужно будет прочитать в base64, так как метод, который ищет прямоугольник принимает именно base64.
Дальше необходимо определиться с тем, где мы будем искать изображение, по которому собрались кликать.
Если это должно происходить в браузере - значит берем нужный элемент, например:
C#:
HtmlElement el = instance.ActiveTab.FindElementByAttribute("html", "fulltagname", "html", "text", 0);
Если мы должны создать прямоугольник, в котором собрались искать изображение.
Вот пример как искать например 250 пикселей от центра во все стороны, используя элемент который взял выше.
C#:
var rect = System.Drawing.Rectangle(el.Width/2-250, el.Height/2-250, el.Width/2+250, el.Height/2+250);
После этого, мы уже можем получить массив координат, где находится искомое изображение.
C#:
string search = instance.ActiveTab.FindImage(
base64, // base64 картинка
new[] { rect }, // массив прямоугольников в которых будем производить поиск
99 // % совпадения
);
Таким образом, с поиском нужной картинки мы разобрались.
Остается кликнуть по нужным координатам.
Значит, нужно разбить результат, создать новый прямоугольник:
C#:
int[] points = search.Split(',').Select(x=>int.Parse(x)).ToArray();
var rec2 = new System.Drawing.Rectangle(points[0], points[1], points[2],points[3]);
Прежде убеждаемся, что мы там нашли что-то дельное.
Ну, и после этого уже можно произвести клик, передав прямоугольник в метод RiseEvent.
C#:
if (rec2.IsEmpty) throw new Exception("Не нашли");
instance.ActiveTab.RiseEvent("click", rec2, "Left"); // производим клик
Как видим, задача не сложная, хотя и необходимо разбить её на мелкие шаги....
Разницы между стандартным кубиком и решением которое я предложил нет совсем.
Это значит, что я помогал человеку решить те проблемы, которые были указаны в первом посте, а именно как кликнуть по своей картинке, так как стандартным способом не получается победить мигание.
Но, я однозначно не претендую что это самое быстрое и самое правильное решение - это решение только решает поставленную проблему пользователя, которая описана в первом сообщении.
В вопросе пользователя не было ничего о том, что ему важно, чтобы поиск происходил например на 5 секунд, а 1.
Если бы такой вопрос был, как переписать стандартный кубик, чтобы ускорить поиск изображения - я бы просто прошел мимо, потому что сторонними dll для данных задач не пользовался.
Но, если вдруг у Вас есть альтернативное решение, которое будет выполнять то же самое, и делать это в 10 раз быстрее - поделитесь пожалуйста, думаю многим людям пригодится.
Хотя, если скорость поиска не подходит - то это уже вопросы к разработчикам Зеннолаб - можно просить их, чтобы актуализировали поиск согласно новым технологиям...
да не будут они ничего актуализировать... так как по их рекомендациям поиск по картинкам не следует использовать в ботах. чисто в крайнем случае. поэтому увы и ах.
из альтернативы можно заюзать openCV, но в этом способе надо поднять планку скила в программировании чуть чуть выше
да не будут они ничего актуализировать... так как по их рекомендациям поиск по картинкам не следует использовать в ботах. чисто в крайнем случае. поэтому увы и ах.
из альтернативы можно заюзать openCV, но в этом способе надо поднять планку скила в программировании чуть чуть выше
Если например игра на юнити, есть необходимость её автоматизировать, то другими средствами без клика по картинкам варианта получить доступ к элементам может быть не предоставлен. Так что было бы хорошо, чтобы все же сделали перезагрузку метода поиска изображения в браузере даже через тот же openCV с коробки, чтобы пользователям не приходилось изучать такие тонкости. Пользователь не должен знать как это работает - он должен просто получить функционал, в который подал что-то на вход, получил нужное действие на выходе.... Но, как Вы и говорите - Зеннолаб делает упор на другой функционал...
Чтобы убрать мигание достаточно наверно увеличит размер окна браузера.
Происходить мигание может потому, что стили сайта пытаются переключаться между медиа запросами CSS.
Если этого не достаточно, чтобы решить проблему (ну, например на сайте просто анимация), тогда мы должны сделать скриншот нужного элемента самостоятельно. В идеальном случае необходимо сохранить в bmp, и убедиться что не были применены какие-то алгоритмы сжатия (намучался однажды с этим, так как jpg по умолчанию сжимается...).
Дальше уже этот скриншот нужно будет прочитать в base64, так как метод, который ищет прямоугольник принимает именно base64.
Дальше необходимо определиться с тем, где мы будем искать изображение, по которому собрались кликать.
Если это должно происходить в браузере - значит берем нужный элемент, например:
C#:
HtmlElement el = instance.ActiveTab.FindElementByAttribute("html", "fulltagname", "html", "text", 0);
Если мы должны создать прямоугольник, в котором собрались искать изображение.
Вот пример как искать например 250 пикселей от центра во все стороны, используя элемент который взял выше.
C#:
var rect = System.Drawing.Rectangle(el.Width/2-250, el.Height/2-250, el.Width/2+250, el.Height/2+250);
После этого, мы уже можем получить массив координат, где находится искомое изображение.
C#:
string search = instance.ActiveTab.FindImage(
base64, // base64 картинка
new[] { rect }, // массив прямоугольников в которых будем производить поиск
99 // % совпадения
);
Таким образом, с поиском нужной картинки мы разобрались.
Остается кликнуть по нужным координатам.
Значит, нужно разбить результат, создать новый прямоугольник:
C#:
int[] points = search.Split(',').Select(x=>int.Parse(x)).ToArray();
var rec2 = new System.Drawing.Rectangle(points[0], points[1], points[2],points[3]);
Прежде убеждаемся, что мы там нашли что-то дельное.
Ну, и после этого уже можно произвести клик, передав прямоугольник в метод RiseEvent.
C#:
if (rec2.IsEmpty) throw new Exception("Не нашли");
instance.ActiveTab.RiseEvent("click", rec2, "Left"); // производим клик
Как видим, задача не сложная, хотя и необходимо разбить её на мелкие шаги....