![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Работаю с Веб-приложением и всю монотонную работу хочу переложить на плечи процессора.
Требуется найти определенные кнопки на экране и по алгоритму выполнять их нажатие в нужный момент. Проблема в том, что поиск заданной картинки по образцу происходит очень медленно. Все картинки-образцы я храню как массив типа байт, а вот скриншот в массив записать не удалось - программа загружает процессор на 50% и работает оч длительное время (не могу дождаться даже). Есть какая-нить другая идея, кроме поиск подмассива в массиве и использования функции: robot.getPixelColor(x,y).getRGB()? Вот кусок кода, на котором зависает приложение (2я строка):
|
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Если нужно покликать кнопки в веб-приложении, может не нужно и городить этот огород с распознаванием и роботом?
Вот к примеру эта либа http://htmlunit.sourceforge.net/ вполне неплохо выполняет функции браузера. Можно без проблем найти кнопку по id и вызвать на ней button.click() вот пример сабмита формы из их getting started:
|
|||
|
||||
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Спасибо за пример, может пригодится для другой задачи, но не этой.
Единственный вопрос: возможно ли с помощью этой либы получить доступ к таблице, которая является отдельной компонентой, используемой в JSF и полистать странички, покликать по ячейкам? По поводу сабжа. Я думал о написании своего браузера, но проблем 3: 1. Протокол не http, a https, в браузер необходимо импортировать сертификаты; 2. Кнопочки (они выгружают файлы) находятся в колонке многостраничной таблицы, причем на каждой странице может быть разное их ко-во а потому и расположение тоже разное (пустые строки имеют меньшую высоту и в этом вся проблема, иначе задачу б давно решил); 3. Все кнопки имеют одинаковое название. У меня такое подозрение, что без нейронных сетей эту задачу не выполнить... |
|||
|
||||
| Temdegon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Мммда. Какие-то непонятные у вас желания - браузеры писать, образы распознавать...
Напишите конкретно, для чего вам это нужно. Нужно скачать все файлы с какого-то сайта? или вы хотите написать браузер, что бы тестировать свое веб-приложение? Вот там же пример обхода таблицы http://htmlunit.sourceforge.net/table-howto.html Я с этой либой работал очень поверхностно, в дебри не влезал. Что она может и что не может разбирайтесь уж сами. Ну или пишите браузер или распознаватель образов |
|||
|
||||
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
||||
|
||||
| Anyone |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Все рисунки, в том числе скрин экрана, представляю как массив байтов с помощью функции:
Для поиска координат изображения ищу подмассив в массиве. Работает очень быстро, но ничего не нахожу. Может так вообще делать нельзя?
Это сообщение отредактировал(а) Anyone - 24.11.2010, 13:39 |
||||
|
|||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Откуда берется pixelArrayNext и что он из себя представляет?
-------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Это искомая картинка, представленна как массив байов:
Очевидно, что функция ImageToBytesArray() возвращает массив байтов не самой картинки, а объекта типа BufferedImage. Как получить необходимый массив? Тот способ, что в ремарках - очень медленный для всего разрешения экрана и потому не подходит: //pixelArrayNext = ((DataBufferByte)(biNext).getRaster().getDataBuffer()).getData(); Это сообщение отредактировал(а) Anyone - 24.11.2010, 14:51 |
|||
|
||||
| jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Формат BMP помимо прочего содержит заголовок и палитру, может даже быть сжат (RLE), поэтому искать подмассив в массиве просто считав два файла бессмысленно. Небольшой пример:
Полное изображение: Заголовок + некоторая часть изображения + то, что мы пытаемся распознать + еще что-то Ваш шаблон, который вы пытаетесь обнаружить: Заголовок + то, что мы пытаемся распознать. Очевидно, что второго в первом Вы не найдете. Это сообщение отредактировал(а) jk1 - 24.11.2010, 15:10 -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
| Temdegon |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 429 Регистрация: 11.10.2008 Где: Minsk Репутация: 7 Всего: 9 |
Я на 99% уверен, что умеет. Но лично за вас искать не буду. Если вам кажется, что написать свой браузер будет проще и надежнее, чем рассмотреть другие варианты - ваше дело. Кроме этого, есть масса других способов. Можно внимательно посмотреть html и javascript страницы, и понять, как он устроен. Я знаю десятки примеров, когда люди на PHP+curl делали клоны очень сложных сайтов. И это при том, что курлу до htmlUnit как до луны пешком. Вот еще вам пища для размышлений:
вставьте в строку браузера, нажмите enter и получите все ссылки с открытой страницы . Очевидно, что даже таким убогим способом можно выдрать с любой страницы любые данные. А если поставить к браузеру FireBug, то возможности вообще безграничны |
||||
|
|||||
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Нашел решение похожей задачи. Попробую и отпишусь.
|
|||
|
||||
| Anyone |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 1.6.2008 Репутация: нет Всего: нет |
Поиск происходит мгновенно, всем спасибо!
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |