Java / HtmlUnit - 如何从HtmlImageInput获取HtmlImage?

时间:2017-05-08 18:34:04

标签: java html image htmlunit

我在html页面上有一个图像也是一个输入。

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        OAuthAuthorizationServerOptions oauthServerOptions = new OAuthAuthorizationServerOptions
        {
            //...,
            Provider = new TokenBasedAuthorizationServerProvider(),
            RefreshTokenProvider = new RefreshTokenProvider()
        };

        app.UseOAuthAuthorizationServer(oauthServerOptions);
    }

我不在乎点击图片。我想将图像保存到文件。这似乎是不可能的,这似乎是荒谬的。我尝试从<input type="image" src=... 投射到HtmlImageInput,但我发现了一个错误。我怎样才能做到这一点?我需要从HtmlUnit切换到其他东西吗?我不关心我需要做什么来完成这件事。

顺便说一句,我尝试使用selenium并截取屏幕截图,但它正在拍摄错误区域的屏幕截图。尝试了多个不同的xpath到同一个元素,它总是采取错误的截图。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分: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);