Java (или любая другая) библиотека для рендеринга веб-страниц в автономном режиме? - PullRequest
5 голосов
/ 02 ноября 2011

Я занимаюсь разработкой Java-приложения.У меня есть сценарий, чтобы сделать снимок экрана с URL-адресом, который поступает на сервер.

Существует ли какая-либо библиотека браузера java (или любой другой язык) для загрузки веб-страниц и получения некоторых снимков экрана загруженной страницы.Было бы хорошо, если бы библиотека разрешала обход DOM.


Обновление:

java(or any lang): любой другой язык не является проблемой, но библиотека должна взаимодействовать с Java.

Я попытался настроить Qt Jambi и потратил много времени на это, но результат ничего не дает.Если вы предоставите какой-то конкретный материал для настройки Jambi, это будет полезно.

Я также дал попытку spynner.py.Мой родной язык - Java, и я подумал, что смогу использовать spynner.py с Jython.Но PyQt нельзя использовать с Jython.Итак, я не ожидаю каких-либо ответов, связанных с Python.


В основном мне нужна библиотека для:

  • Снимок экрана.

  • Некоторый обход DOM.

  • Некоторое выполнение Javascript.

  • и получить результат Выполненный код JS.

Спасибо.


Я ценю все ответы.Я закончил с phantomjs.Это хорошо подходит для моих нужд.Это инструмент командной строки.

Ответы [ 4 ]

7 голосов
/ 07 ноября 2011

Selenium / Webdriver предоставляет все эти функции.

Webdriver предоставляет простой API, позволяющий вам «управлять» экземпляром браузера. Поддерживаются многие браузеры.

Смотрите простой пример:

http://seleniumhq.org/docs/03_webdriver.html#getting-started-with-selenium-webdriver

Обход dom с использованием локаторов «By»:

Хорошие примеры здесь: http://www.qaautomation.net/?p=388

driver.findElement(By.name("q"));

Выполнение JavaScript:

http://code.google.com/p/selenium/wiki/FrequentlyAskedQuestions#Q:_How_do_I_execute_Javascript_directly?

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript("return document.title");

Снимок экрана:

http://seleniumhq.org/docs/04_webdriver_advanced.html#taking-a-screenshot

 File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
3 голосов
/ 02 ноября 2011

В java вы должны прочитать следующие сообщения stackoverflow:

Программный веб-браузер Java-библиотека

Сделать скриншот веб-страницы с JavaScript?

Встроить веб-браузер в Java-приложение


Потому что вы говорите «или любой другой язык»:

В Python у вас есть Spynner :

Spynner - это программный модуль веб-браузера с поддержкой состояния для Python с поддержкой Javascript / AJAX, основанный на платформе QtWebKit.

Согласно документации, вот небольшой фрагмент:

import spynner

browser = spynner.Browser()
browser.load("http://www.wordreference.com")
browser.runjs("console.log('I can run Javascript!')")
browser.runjs("_jQuery('div').css('border', 'solid red')") # and jQuery!
browser.select("#esen")
browser.fill("input[name=enit]", "hola")
browser.click("input[name=b]")
browser.wait_page_load()
print browser.url, len(browser.html)
browser.close()
2 голосов
/ 10 ноября 2011

Этот сайт выполняет снимок экрана :

Учебник: http://www.paulhammond.org/webkit2png/

Программа: http://www.paulhammond.org/2009/03/webkit2png-0.5/webkit2png-0.5.txt

Может ли быть проще? :)

На этой странице упоминаются другие инструменты:

» Если вы используете Mac, но не любите командную строку, тогда вы можете попробовать Paparazzi или Little Snapper. Если вы используете linux, вас может заинтересовать khtml2png, скрипт скриншота Mozilla Мэтта Биддульфа или скрипт QT Webkit Роланда Тапкена. «

Вы можете использовать Rhino, Gecko для выполнения javascript .

Для dom traversal есть много опций, но если вы используете Rhino, вы можете использовать jQuery, чтобы сделать его еще проще!

Надеюсь, у вас получится!

1 голос
/ 08 ноября 2011

Если вам нужен скриншот, думаю, вам важно качество рендеринга.У нас был похожий сценарий.В итоге мы запустили firefox в режиме без головы, на самом деле просматриваем веб-страницу и получаем снимок экрана в памяти.Это не тривиально, но я могу дать вам более подробную информацию, если вы хотите пойти на это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...