using System; using System.Threading.Tasks; using Newtonsoft.Json; namespace CefSharp.Example.DevTools { public static class DevToolsExtensions { /// /// Calls Page.captureScreenshot without any optional params /// (Results in PNG image of default viewport) /// https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-captureScreenshot /// /// the ChromiumWebBrowser /// png encoded image as byte[] public static async Task CaptureScreenShotAsPng(this IWebBrowser chromiumWebBrowser) { //if (!browser.HasDocument) //{ // throw new System.Exception("Page hasn't loaded"); //} var browser = chromiumWebBrowser.GetBrowser(); if (browser == null || browser.IsDisposed) { throw new Exception("browser is Null or Disposed"); } //var param = new Dictionary //{ // { "format", "png" }, //} //Make sure to dispose of our observer registration when done using (var devToolsClient = browser.GetDevToolsClient()) { const string methodName = "Page.captureScreenshot"; var result = await devToolsClient.ExecuteDevToolsMethodAsync(methodName); dynamic response = JsonConvert.DeserializeObject(result.ResponseAsJsonString); //Success if (result.Success) { return Convert.FromBase64String((string)response.data); } var code = (string)response.code; var message = (string)response.message; throw new Exception(code + ":" + message); } } } }