Jak mogę zmusić WebClient do ściągania zewnętrznych arkuszy stylów i ciał graficznych, tak jak robi to zwykła przeglądarka internetowa?Jak mogę powiedzieć WebClient HtmlUnit, aby pobrać obrazy i css?
11
A
Odpowiedz
6
Co robię teraz to:
public static final HashMap<String, String> acceptTypes = new HashMap<String, String>(){{
put("html", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
put("img", "image/png,image/*;q=0.8,*/*;q=0.5");
put("script", "*/*");
put("style", "text/css,*/*;q=0.1");
}};
protected void downloadCssAndImages(HtmlPage page) {
String xPathExpression = "//*[name() = 'img' or name() = 'link' and @type = 'text/css']";
List<?> resultList = page.getByXPath(xPathExpression);
Iterator<?> i = resultList.iterator();
while (i.hasNext()) {
try {
HtmlElement el = (HtmlElement) i.next();
String path = el.getAttribute("src").equals("")?el.getAttribute("href"):el.getAttribute("src");
if (path == null || path.equals("")) continue;
URL url = page.getFullyQualifiedUrl(path);
WebRequestSettings wrs = new WebRequestSettings(url);
wrs.setAdditionalHeader("Referer", page.getWebResponse().getRequestSettings().getUrl().toString());
client.addRequestHeader("Accept", acceptTypes.get(el.getTagName().toLowerCase()));
client.getPage(wrs);
} catch (Exception e) {}
}
client.removeRequestHeader("Accept");
}
0
HtmlUnit nie pobiera CSS ani obrazów. Są one bezużyteczne bez głowy przeglądarce ...
Ostatnio usłyszałem od niego jest tutaj, ale bilet jest oznaczony jako prywatny: http://osdir.com/ml/java.htmlunit.devel/2007-01/msg00021.html
1
źródło: How to get base64 encoded contents for an ImageReader?
HtmlImage img = (HtmlImage) p.getByXPath("//img").get(3);
ImageReader imageReader = img.getImageReader();
BufferedImage bufferedImage = imageReader.read(0);
String formatName = imageReader.getFormatName();
ByteArrayOutputStream byteaOutput = new ByteArrayOutputStream();
Base64OutputStream base64Output = new base64OutputStream(byteaOutput);
ImageIO.write(bufferedImage, formatName, base64output);
String base64 = new String(byteaOutput.toByteArray());
1
Oto co wymyśliłem:
public InputStream httpGetLowLevel(URL url) throws IOException
{
WebRequest wrq=new WebRequest(url);
ProxyConfig config =webClient.getProxyConfig();
//set request webproxy
wrq.setProxyHost(config.getProxyHost());
wrq.setProxyPort(config.getProxyPort());
wrq.setCredentials(webClient.getCredentialsProvider().getCredentials(new AuthScope(config.getProxyHost(), config.getProxyPort())));
for(Cookie c:webClient.getCookieManager().getCookies(url)){
wrq.setAdditionalHeader("Cookie", c.toString());
}
WebResponse wr= webClient.getWebConnection().getResponse(wrq);
return wr.getContentAsStream();
}
Moje testy pokazują, że robi Proxys wsparcia i że nie tylko przenosi pliki cookie z WebClient, ale również wtedy, gdy serwer wysyła nowe ciasteczka podczas odpowiedzi, WebClient zje te ciasteczka
Powiązane problemy
- 1. jak powiedzieć gradle, aby pobrać wszystkie słoiki źródłowe
- 2. HtmlUnit: jeden WebClient na wątek - czy wątek jest bezpieczny?
- 3. jak cache css, obrazy i js?
- 4. Jak powiedzieć curl, aby sprawdzić istnienie pliku przed pobraniem?
- 5. htmlunit: zwraca całkowicie załadowaną stronę
- 6. Jak wysłać żądanie HEAD za pomocą HtmlUnit?
- 7. Jak mogę określić wiele katalogów dla RSpec, aby pobrać testy?
- 8. Jak mogę powiedzieć podprocesowi, aby przestał uciekać od moich ofert?
- 9. Jak mogę powiedzieć Django, aby zapisać moją testową bazę danych?
- 10. XMLEventWriter: jak mogę powiedzieć, aby pisać puste elementy?
- 11. Jak mogę powiedzieć Operacje w Google, aby przesyłać dźwięk?
- 12. Jak mogę powiedzieć układowi robot, aby nie rejestrował słowa kluczowego?
- 13. Jak mogę powiedzieć kompilatorowi, aby nie tworzył obiektu tymczasowego?
- 14. Jak mogę powiedzieć Scrapy, aby indeksował tylko linki wewnątrz Xpath?
- 15. Jak mogę powiedzieć ORM Django, aby odwrócić kolejność wyników zapytania?
- 16. Jak mogę powiedzieć RavenDB, aby ignorował właściwość, ale nie WebAPI?
- 17. Jak mogę powiedzieć Mutt, aby nie przechowywać wysłanych wiadomości?
- 18. Jak korzystać z HtmlUnit w Javie?
- 19. CSS i obrazy na stronie wzorcowej
- 20. Gdzie mogę pobrać 64-bitowe obrazy VM Travis-CI?
- 21. Jak powiedzieć proguardowi, aby utrzymywał stałe i stałe enum
- 22. Generowanie PDF z CSS i obrazy
- 23. Jak powiedzieć valgrind, aby zapamiętywać rozwidlone procesy?
- 24. HTMLUnit: zmiana ciągu agenta użytkownika
- 25. Jak mogę pobrać i zainstalować lint?
- 26. css dwa obrazy tła
- 27. W języku Java i HtmlUnit, jak czekać na zakończenie strony i załadowanie jej jako HTML?
- 28. HTMLUnit: bardzo powolne wykonywanie?
- 29. Obrazy CSS W innym folderze
- 30. Jak powiedzieć RadioButtonList, aby NIE generować tabeli
Co jeśli użytkownik chce sprawdzić css lub obrazy z bezgłową przeglądarką? To wydaje się być tym, co sugeruje pytanie. Sądzę, że css i obrazy nie byłyby bezużyteczne, prawda? W rzeczywistości to właśnie doprowadziło mnie do tego pytania, byłoby miło, gdybym mógł użyć przeglądarki bezgłowej, by sprawdzić obraz według rozmiaru lub hash lub css dla wartości koloru tła. Próbując pomóc tutaj ... twoja odpowiedź jest trochę sprzeczna, a nie konstruktywna. – fooMonster