Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> OLE\ActiveX, получение объекта 
:(
    Опции темы
tepkuh
Дата 17.7.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 23.4.2008

Репутация: нет
Всего: нет



Вообщем конечная задача это достать картинку, именно картинку, а не Properties(тип объекта, размер в килобайтах, длинна, высота и прочее) из страницы которую загрузил веб браузер,  Браузер может быть любой(мне все равно, мне лишь бы найти с которым я могу работать нормально) любой начиная от IE, FireFox заканчивая сторонними браузерами типа SWT, EZ JCom, JExplorer и прочее... 

Т.е. мне надо открывать браузер(с поддержкой javascript) загружать содержимое веб страницы и когда веб страница загрузится просто от туда вытаскивать картинку(проблема в том что картинка динамическая и просто вытащить src картинки толку не даст, картинка уже будет другой). Как это сделать ума уже просто не приложу, уже наверно второй месяц бьюсь.
 
Начинал с SWT где мог добратся до Properties, через его OLE Automation object, еще пытался через различные event'ы поймать момент где браузеры грузят именно все эти объекты и перехватывать загрузку(т.е. самом браузеру не загружать объект, а перехватывать event и грузить своим модулем) event'а я такого просто не нашел. Уже не знаю куда копать. Подскажите люди добрые что хотя бы отгуглить.
PM MAIL   Вверх
kkorsakoff
Дата 21.7.2008, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 14



Через clipboard это делают. Программно выделяют картинку и вызывают команду copy.
Копать сюда http://support.microsoft.com/kb/293125
Ежели вы смогли получить проперти, думаю знаний хватит сделать и этоsmile
Если не получится, поищу свой код. Я работал с IE через JExplorer, но суть то одна везде
PM MAIL WWW ICQ   Вверх
tepkuh
Дата 22.7.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 23.4.2008

Репутация: нет
Всего: нет



Пасиба большое, мне кажется вы мне очень помогли. Я уже руки практически опустил, на других форумах мне посоветовали вообще написать прокси сервер через который будет идти трафик, а это жутко не удобно пасти еще один процесс. 
Но я пока не знаю как это реализовать, я погуглил поверхносно и нигде не могу найти примеров работы с интерфесом  IHTMLControlRange на java.  Один дотнет только попадается. Я бы очень-очень был бы вам признателен если бы вы кинули сюда свой код. 
PM MAIL   Вверх
tepkuh
Дата 22.7.2008, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 23.4.2008

Репутация: нет
Всего: нет



Ну вообщем частично получилось. 
Решил зайти с зади. Исполнением JS "в своем" браузере

Код

<html>
<body>
<img src="http://images.rambler.ru/head2005/rambler.gif" id="myT">
<script language="JavaScript">
function function1() {
    var myControlR = document.body.createControlRange();
    myControlR.add(myT);
    myControlR.execCommand("Copy");
} 
</script>
<input type="button" value="Click me" onclick="function1();">
</body>
</html>

Вот пример кода как это на JS исполняется, то же самое могу выполнить и на стороне "своего" браузера. И оно работает.

Добратся до интерфейса IHTMLControlRange никак не получается (

Вам kkorsakoff огромное спасиба за такой совет. Задача ИМХО очень не тревиальная.
Но код я бы ваш полюблму позыркал бы))
PM MAIL   Вверх
tepkuh
Дата 23.7.2008, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 23.4.2008

Репутация: нет
Всего: нет



как я и боялся JS довольно таки долго отрабатывается около 3-5 секунд, т.е. это решение крайний случай. Надо как то добратся до интерфейса IHTMLControlRange мне кажется это будет побыстрее. А у меня никак не получается( 
PM MAIL   Вверх
kkorsakoff
Дата 24.7.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 14



Код не нашел, но набросал быстро новый по аналогии с пример на MS.
Лично у меня работаетsmile

Код

public static void main(String[] args) throws IOException, UnsupportedFlavorException, ClassNotFoundException {
        final WebBrowser browser = new HeadlessBrowser();
        browser.navigate("http://support.microsoft.com/kb/293125");
        browser.waitReady();
        System.out.println("loaded");

        try {
            browser.getOleMessageLoop().doInvokeAndWait(new Runnable() {
                public void run() {
                    IHTMLDocument2 documentPeer = (IHTMLDocument2) browser.getDocument().getDocumentPeer();
                    IHTMLElement body = documentPeer.getBody();
                    //        IHTMLElement2 body2=null;
                    IHTMLElement2Impl body2 = new IHTMLElement2Impl();
                    body.queryInterface(body2.getIID(), body2);

                    IDispatch rangeDispatch = body2.createControlRange();
                    IHTMLControlRangeImpl range = new IHTMLControlRangeImpl();
                    rangeDispatch.queryInterface(range.getIID(), range);

                    IDispatch imgDispatch = documentPeer.getImages().item(new Variant("gsfx_brnd_PageLogo"), new Variant());
                    IHTMLControlElementImpl imgControl = new IHTMLControlElementImpl();
                    imgDispatch.queryInterface(imgControl.getIID(), imgControl);
                    range.add(imgControl);

                    range.execCommand(new BStr("Copy"), VariantBool.FALSE, new Variant());
                    range.release();
                }
            });
        } catch (InterruptedException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (InvocationTargetException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }

        browser.close();
        System.out.println("done");

      
    }


Я работаю с JExplorer, но есть одно но - это платный продукт.
Но в принципе, думаю, этот пример можно повторить с помощью любой библиотеки, позволяющей работать с COM.
PM MAIL WWW ICQ   Вверх
tepkuh
Дата 24.7.2008, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 23.4.2008

Репутация: нет
Всего: нет



Ой спасибо, ой спасибо. Я по другому пытался добратся до интерфейса, у меня мега окольные пути.
Я уже пересмотрел кучу бравзеров и мне что JExplorer что еще какой то черт с рогами все равно, я адаптируюсь к любому. СПАСИБО!!! еще раз ОГРОМНОЕ. Вы мне очень реально помогли,  я топтался черт знает сколько времени 
PM MAIL   Вверх
kkorsakoff
Дата 24.7.2008, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.10.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 14



Да не за что)
А Jexplorer это кстати не браузер, а просто библиотека доступа к COM-объектам Internet Explorer
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0472 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.