2009-03-30 2 views
0

Возможно ли программно запустить приложение с Java, а затем отправить ему команды и получить выход программы?Java: «Управление» Внешнее приложение

Я пытаюсь реализовать этот сценарий:

Я хочу получить доступ к веб-сайт, который использует множество яваскрипт и специальных HTML + CSS особенности -> сайт не отображается должным образом в swt.browser или какой-либо из другой из доступных виджетов браузера. Но веб-сайт может отображаться без каких-либо проблем в firefox. Поэтому я хочу запустить скрытый экземпляр firefox, загрузить веб-сайт и получить данные. (Было бы неплохо, если FF может быть встроен в JFrame или так ..)

У кого-нибудь есть идея, как это реализовать? Любая помощь будет действительно оценена!

EDIT: на сайте загружен Javascript, который делает некоторую магию html и загружает некоторые изображения. Когда я только читаю html с веб-сайта, я вижу не что иное, как некоторые вызовы JavaScript. Но когда веб-сайт загружается в браузере, он отображает некоторые изображения, наложенные на текст. Вот что я пытаюсь показать пользователю моего приложения.

+0

>> загрузить сайт и получить данные - это не решит вашу проблему с рендерингом, не так ли? – talonx

+0

Если вы в этом уверены, вы можете взглянуть на то, как GWT решает эту проблему - где вы хотите отображать firefox внутри java-приложения. В GWT его вызванный хостинг-режим (OOPHM, ссылка http://allahbaksh.blogspot.com/2009/02/building-gwt-oophm-from-source.html). – Chii

+0

Я не понимаю, что вы действительно хотите сделать? Показать веб-сайт? Получить некоторые данные HTML из него? Получить текущий HTML DOM на сайте, который, возможно, был создан некоторым JavaScript? Или вы хотите имитировать взаимодействие пользователей на указанном веб-сайте? –

ответ

1

Чтобы запустить Firefox из приложения, вы можете использовать:

Runtime runtime = Runtime.getRuntime(); 
try { 
    String path = "/path/to/firefox"; 
    Process process = runtime.exec(path + " " + url); 
} catch (IOException e) { 
    // ... 
} 

Для управления процессами, как только они начали, часто можно использовать process.getInputStream() и process.getOutputStream() , но это не поможет вам в случае с Firefox.

Возможно, вам стоит изучить способы решения конкретной проблемы, кроме как пытаться напрямую взаимодействовать между вашим приложением и экземпляром браузера. Попробуйте либо переместить весь интерфейс в Java gui, либо сделать веб-приложение с нуля - не наполовину, а наполовину.

1

См. Это article - он научит вас, как начать процесс, прочитать его вывод и записать в его входной поток.

Однако это решение может быть не лучшим для вашей проблемы. Какие данные вам нужно получить с веб-страницы? Было бы лучше прочитать html с помощью HTTP GET, а затем проанализировать его с помощью анализатора Html?

0

Если у вас есть браузер в режиме текстового режима (например, links2 on linux), вы можете увидеть, насколько хорошо , что может отображать страницу. Например, команда «links -dump http://someurl.com» будет форматировать страницу как текст и немедленно выйти, в результате чего результат может быть легко проанализирован с использованием методов, которые предлагают Ray Myers и kgiannakakis.

0

Если веб-сайт является статическим, вы можете использовать веб-скребок, например Jericho, для загрузки URL-адреса, разбора HTML-кода и перехода по DOM к информации, которая вам нужна.

0

Хотя a similar feature to what you describe is planned for FireFox в будущем, он еще не доступен. Эта функция дублируется TaskFox и из связанной вики ", ее цель - предоставить пользователям возможность быстрого доступа к информации и выполнения задач, которые обычно выполняются в несколько шагов".

Новость о предстоящей функции TaskFox сегодня просто сломалась. Возможно, вам стоит подумать, что карьера является психическим, а не программистом.

Смежные вопросы