mk321
#programowanie #java #selenium

Chcę w aplikacji na serwerze zrobić screenshota strony internetowej.

Tu znalazłem sposób z Selenium: http://stackoverflow.com/questions/3422262/take-a-screenshot-with-selenium-webdriver/3423347#3423347
Działa to tak, że program uruchamia przeglądarkę internetową (!), robi screena i zapisuje. Oczywiście takie coś nie zadziała serwerze (no i jak to w ogóle wygląda...).

Jak najprościej zrobić to co chcę (programowo w Javie)? Szukać w Selenium? Czy to jest biblioteka która tylko korzysta z rzeczywistej przeglądarki? (tu znalazłem, że jest jakiś "virtual display", ale nie mogę znaleźć odpowiednika klasy Display w Javie).
2
  • Najlepsze
  • Wszystkie komentarze
o_40855
@mk321: nie musisz używać "prawdziwej" przeglądarki. Selenium może użyć np. PhantomJS, czyli "headless browser". To taki WebKit bez żadnego UI.
2
adios
@mk321: użyj headless drivera. Słowa klucz - headlesss xvfb
2
k.....l
k.....l
@mk321: Afair Selenium potrafi wyrenderować całą stronę bez użycia przeglądarki. HtmlDriver?
1
mk321
PhantomJS


@o_40855: a to nie jest w JavaScripcie po stronie klienta? Ja potrzebuję robić te screeny po stronie serwera (bez udziału użytkownika). Czy to jakoś podpina się PhantomJS do Selenium?

@adios:
0
k.....l
k.....l
NekoHTML


@mk321: Jak dodałeś dependency?
0
o_40855
@mk321: Nie, PhantomJs jest tym, co powiedziałem - WebKitem bez GUI. Obsługuje się to np. przez JS, albo przez Selenium.
0
mk321
@kisi3l: W pom.xml (projekt Mavenowy) mam:


org.seleniumhq.selenium
0
k.....l
k.....l
@mk321: A pełna treść wyjątku?
0
mk321
@kisi3l:

org.openqa.selenium.WebDriverException: com.gargoylesoftware.htmlunit.ObjectInstantiationException: unable to create HTML parser


http://wklej.org/hash/eb93c7d2416/
0
k.....l
k.....l
0
k.....l
k.....l
@mk321: Ewentualnie sprawdź, czy nie masz konfliktów wersji, może jakaś inna zależność dociąga starą wersje Neko, etc. Hint: mvn dependency:tree
0
mk321
@kisi3l: nie ma metody setJavaScriptEnabled w klasach WebClient ani WebDriver (chyba dlatego, że to dla starszych wersji). Znalazłem jednak sposób, żeby to ustawić:
DesiredCapabilities cap = new DesiredCapabilities();
cap.setJavascriptEnabled(true);
WebDriver driver = new HtmlUnitDriver(cap);
Ale też nie pomogło
0
mk321
@kisi3l: dobra, jakoś udało mi się uruchomić (zrobiłem nowy projekt, widocznie rzeczywiście coś mi się gryzie, potem najwyżej to pomęczę).
Ale jest inny problem: HtmlUnitDriver nie wspiera robienia screenów:
Exception in thread "main" java.lang.ClassCastException: org.openqa.selenium.htmlunit.HtmlUnitDriver cannot be cast to org.openqa.selenium.TakesScreenshot
Szukałem rozwiązania:
https://code.google.com/p/selenium/issues/detail?id=1361
(nie da się, ta "implementacja" pobiera pliki ze strony a nie
0