TEdgeBrowserでPNGとして保存する

Delphiのバージョンは12.1です。

手動でよければ

コンテキストメニューで「スクリーンショット」を選ぶとPNGとして保存できます。

コンテキストメニューのスクリーンショット

CapturePreview

TEdgeBrowserのCapturePreviewを使うとPNGとして保存できますが、ページ全体ではなく表示されている部分のみになります。

begin
  EdgeBrowser1.CapturePreview('c:\temp\test.png');
end;

CallDevToolsProtocolMethod

CallDevToolsProtocolMethodを使ってDevToolsの機能を呼び出します。ページ全体をPNGにできますがExperimentalな方法です。

type  
  TCoreWebView2CallDevToolsProtocolMethodCompletedHandler = class
    (TInterfacedObject, ICoreWebView2CallDevToolsProtocolMethodCompletedHandler)
  private
    function Invoke(errorCode: HResult; returnObjectAsJson: PWideChar): HResult; stdcall;
  end;

implementation

uses
  System.JSON, System.NetEncoding;

function TCoreWebView2CallDevToolsProtocolMethodCompletedHandler.Invoke
  (errorCode: HResult; returnObjectAsJson: PWideChar): HResult;
var
  JSON: TJSONObject;
  Base64Data: String;
  Stream: TMemoryStream;
  Bytes: TArray;
begin
  JSON := TJSONObject.ParseJSONValue(returnObjectAsJson) as TJSONObject;
  try
    Base64Data := JSON.GetValue('data');
    Stream := TMemoryStream.Create;
    try
      Bytes := TNetEncoding.Base64.DecodeStringToBytes(Base64Data);
      Stream.WriteData(Bytes, Length(Bytes));
      Stream.SaveToFile('c:\temp\test.png');
    finally
      Stream.Free;
    end;
  finally
    JSON.Free;
  end;

  Result := errorCode;
end;
const
  Method = 'Page.captureScreenshot';
  Params = '{"format":"png", "captureBeyondViewport":true}';
begin
  EdgeBrowser1.DefaultInterface.CallDevToolsProtocolMethod(Method, PWideChar(Params),
    TCoreWebView2CallDevToolsProtocolMethodCompletedHandler.Create);
end;

参考リンク

関連情報