2017-05-08 52 views
1

我在html页面上也有输入图像。Java/HtmlUnit - 如何从HtmlImageInput获取HtmlImage?

<input type="image" src=... 

我不在乎点击图像。我想将图像保存到文件。这似乎是不可能的,这似乎是荒谬的。我试图从HtmlImageInput投到HtmlImage,但我只是得到一个错误。我怎样才能做到这一点?我是否需要从HtmlUnit切换到其他?我不在乎我需要做些什么来完成这件事。

顺便说一句,我尝试使用硒并采取截图,但它采取了错误的区域截图。尝试了多个不同的xpaths到相同的元素,它总是采取错误的截图。

+0

你必须做一个'里面它是输入form',然后对其进行处理的服务器端做无论你想做什么。 –

回答

0

感谢您的举报。

HtmlImage类似,.saveAs(File)只是addedHtmlImageInput

顺便说一句,如果你不能使用最新的快照,那么你可以使用:

try (WebClient webClient = new WebClient()) { 
    HtmlPage page = webClient.getPage("http://localhost:8080"); 
    HtmlImageInput input = page.querySelector("input"); 
    URL url = page.getFullyQualifiedUrl(input.getSrcAttribute()); 
    final String accept = webClient.getBrowserVersion().getImgAcceptHeader(); 
    final WebRequest request = new WebRequest(url, accept); 
    request.setAdditionalHeader("Referer", page.getUrl().toExternalForm()); 
    WebResponse imageWebResponse = webClient.loadWebResponse(request); 
} 
+0

如果图像在每次重新加载url时发生变化,这项工作是否可行? – user9087

+0

我相信是这样,因为JavaScript会改变'src'属性,所以URL会改变。 –

+0

图像本身是一个aspx文件,因此JavaScript不会更改网址。这是一样的,但重新加载时图像改变。 – user9087

0
HtmlImage codeImg = (HtmlImage) findElement(xpath, index); 
    InputStream is = null; 
    byte[] data = null; 
    try { 
     is = codeImg.getWebResponse(true).getContentAsStream(); 
     data = new byte[is.available()]; 
     is.read(data); 
    } catch (IOException e) { 
     log.error("get img stream meets error :", e); 
    } finally { 
     IOUtils.closeQuietly(is); 
    } 
    if (ArrayUtils.isEmpty(data)) { 
     String errorMessage = String.format("downLoad img verify code with xpath %s failed.", xpath); 
     throw new EnniuCrawlException(TargetResponseError.ERROR_RESPONSE_BODY, errorMessage); 
    } 
    String base64Img = Base64Utils.encodeToString(data); 
+0

请解释你的答案 – Mazz