Come posso rendere WebClient scaricare fogli di stile css esterni e corpi immagine come fa un normale browser web?Come posso dire a WebClient di HtmlUnit di scaricare immagini e css?
11
A
risposta
6
Quello che sto facendo in questo momento è:
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 non scarica CSS o immagini. Essi sono inutili per un browser senza testa ...
ultima volta che ho sentito parlare di esso è qui, ma il biglietto è contrassegnato come privato: http://osdir.com/ml/java.htmlunit.devel/2007-01/msg00021.html
1
fonte: 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
Ecco cosa mi si avvicinò con:
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();
}
miei test dimostrano, che lo fa proxy di supporto e che porta non solo i cookie dal WebClient, ma anche se server invia nuovi cookie durante la risposta, il WebClient mangerà quei biscotti
Problemi correlati
- 1. Passaggio di credenziali di autenticazione di base a ogni richiesta con HtmlUnit WebClient
- 2. Come posso dire a PHP di scaricare le eccezioni come testo non elaborato anziché HTML?
- 3. HtmlUnit sull'applicazione Android
- 4. Come utilizzare HtmlUnit in Java?
- 5. Come posso dire a iOS di scaricare un file da iCloud Drive e ottenere un feedback di avanzamento
- 6. Come accedere a un sito con WebClient?
- 7. Come posso scaricare solo una parte di una pagina?
- 8. WebClient è il modo migliore per scaricare i dati http?
- 9. HtmlUnit e biscotti manipolazione ("ATTENZIONE: Cookie respinto")
- 10. Java: come configurare htmlunit
- 11. Quali browser scaricare immagini nascoste
- 12. Trovare e scaricare immagini all'interno della discarica di Wikipedia
- 13. Java - Invio di una richiesta di post con HtmlUnit
- 14. HTMLUnit: modifica stringa User Agent
- 15. HTMLUNIT v. 2.15 Blocco deadlock deadlock
- 16. Come forzare l'aggiornamento di immagini e file css in CakePHP?
- 17. Come posso dire a CMake di usare Clang su Windows?
- 18. Come posso dire a clang-format di seguire questa convenzione?
- 19. Come posso dire ad AngularJS di "aggiornare"
- 20. C# utilizzando WebClient per scaricare Chunked contenuti codificati
- 21. Scarica file utilizzando HtmlUnit
- 22. HTMLUnit: esecuzione super slow?
- 23. .net equivalente di htmlunit?
- 24. Posso dire a git pull di sovrascrivere invece di unire?
- 25. htmlunit: restituisce una pagina completamente caricata
- 26. css due immagini di sfondo
- 27. Sovrapposizione di immagini nei CSS
- 28. C# webclient e server proxy
- 29. CSS - Sprites come immagini di sfondo
- 30. Qual è il compromesso per disabilitare CSS in HTMLUnit?
Che cosa succede se l'utente vuole verificare il css o le immagini con un browser headless? Questo sembra essere quello che è implicito nella domanda. Immagino che il css e le immagini non sarebbero inutili, giusto? In effetti, questo è quello che mi ha portato a questa domanda, sarebbe bello se potessi usare un browser headless per controllare un'immagine per dimensione o hash o un css per i valori di un colore di sfondo. Cercando di aiutare qui ... la tua risposta viene fuori un po 'polemica piuttosto che costruttiva. – fooMonster