javascript - 计算在java webdriver中加载的图像的md5

标签 javascript java selenium webdriver

我想计算在 java 中加载到 webdriver 中的图像的 md5。 webdriver 是 Firefox。

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.JavascriptExecutor;


String script = "var imgElement = document.querySelector('div.mtl:nth-child(2) > div:nth-child(1) > img:nth-child(1))'; *** return md5 of image *** ";
String url = "http://www.facebook.com";

WebDriver webDriver = new FirefoxDriver();
driver.get(url);
JavascriptExecutor js = (JavascriptExecutor) driver;
Stgin md5 = (String) js.executeScript(script);

在此代码中,必须替换为:

*** return md5 of image ***

最佳答案

您可以使用 fetchforce-cache 从缓存中获取内容。然后从响应中消化 arrayBuffer。不幸的是,MD5 太旧了,浏览器不再支持它了。查看有关加密的更多详细信息 here .您可以选择 SHA-1、SHA-256、SHA-384 和 SHA-512。请参阅下面的摘要 SHA-256 示例。

public void getImageSHA256(){
    driver.get("https://www.blognone.com/");        
    WebElement img = driver.findElement(By.cssSelector("img"));
    String imgUrl = img.getAttribute("src").trim();
    String script = "function hex(buffer) {  var hexCodes = [];  var view = new DataView(buffer);  for (var i = 0; i < view.byteLength; i += 4) { var value = view.getUint32(i); var stringValue = value.toString(16); var padding = '00000000'; var paddedValue = (padding + stringValue).slice(-padding.length); hexCodes.push(paddedValue);  }  return hexCodes.join(\"\");}" +
    "var callback = arguments[arguments.length - 1];" + 
    "fetch(arguments[0],{cache:'force-cache'}).then((response)=> {" +
        "return response.arrayBuffer(); }).then((buffer)=>{" +
            " return crypto.subtle.digest('SHA-256', buffer); }).then((hashArray)=>{" + 
                " callback(hex(hashArray));"+
                "});";
    driver.manage().timeouts().setScriptTimeout(15, TimeUnit.SECONDS);
    Object response = ((JavascriptExecutor) driver).executeAsyncScript(script, imgUrl);
    System.out.println(response);
}

下面的屏幕截图显示了我的代码中的 SHA-256 与在线工具中的 SHA-256 之间的比较。 Results comparison

关于javascript - 计算在java webdriver中加载的图像的md5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44898420/

相关文章:

javascript - 使用对象复制数组的最佳实践

java - 模拟框架对我有什么用?

javascript - 通过 JavaScript/jQuery/Selenium WebDriver 获取事件连接数

selenium - webdriver 如何与浏览器通信/工作?

javascript - XMLHttpRequest无法加载XXX No'Access-Control-Allow-Origin' header

javascript - 检查 div 的内容以应用特定 ID

java - MOXy/JAXB "prototype pattern"- 接口(interface)继承

java - Jsoup 解析包含 span 标签的 HTML

selenium - Protractor 错误: SyntaxError: Unexpected token =

javascript - 需要帮助理解书中的这段代码 "jquery in action"