0

I'm writing an application using WebView2 in VB.net.

I want to save a screenshot of a certain area displayed in WebView2 to an image using chrome DevTool.

The screenshot of the displayed part was saved successfully.

However, after specifying clip (Viewport), it fails and a pure white image is output.

If you know what's wrong, please let me know


    Dim resultJson = Await .CoreWebView2.CallDevToolsProtocolMethodAsync("DOM.getDocument", "{}")
    
    Dim result_viewport_x = Await .ExecuteScriptAsync("document.getElementById(""puzzle-image"").childNodes[0].childNodes[0].getBoundingClientRect().x")
    Dim result_viewport_y = Await .ExecuteScriptAsync("document.getElementById(""puzzle-image"").childNodes[0].childNodes[0].getBoundingClientRect().y")
    Dim result_viewport_w = Await .ExecuteScriptAsync("document.getElementById(""puzzle-image"").childNodes[0].childNodes[0].getBoundingClientRect().width")
    Dim result_viewport_h = Await .ExecuteScriptAsync("document.getElementById(""puzzle-image"").childNodes[0].childNodes[0].getBoundingClientRect().height")
    
    
    Dim viewport As String = ""
    viewport &= "{""x"" : " & result_viewport_x
    viewport &= ",""y"" : " & result_viewport_y + 20
    viewport &= ",""width"" : " & result_viewport_w
    viewport &= ",""height"": " & result_viewport_h - 20
    viewport &= ",""scale"" : 1"
    viewport &= "}"
    
    
    Dim param = "{ ""format"" : ""jpeg"" , ""clip"" : " & viewport & " , ""captureBeyondViewport"": True }"
    Dim resultJson2 = Await .CoreWebView2.CallDevToolsProtocolMethodAsync("Page.captureScreenshot", param)
    Dim data = System.Text.Json.JsonSerializer.Deserialize(Of Dictionary(Of String, String))(resultJson2) 
    Dim newBytes = Convert.FromBase64String(data("data"))
    System.IO.File.WriteAllBytes(fileName, newBytes)

0 Answers0