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);
}
}
}
}