CefSharp GetSourceAsync() 作为字节数组

CefSharp GetSourceAsync() as byte array

我在 GitHub、Whosebug 和 Google 上搜索了几个小时都没有成功,所以我想我被困住了。

我使用 CefSharp 获取位于 CloudFlare 后面的页面的源代码:

public static string GetCefSource(string url)
{
    Browser.Load(url); //An instance of ChromiumWebBrowser
    Thread.Sleep(15000); //Debatable (it would be better to wait for the real content instead of waiting for "some random time until CloudFlare does its thing")
    string source = Browser.GetSourceAsync().ConfigureAwait(true).GetAwaiter().GetResult(); //Don't ask me the purpose of ConfigureAwait, NetAnalyzers asks for it (I'll look into it)
    return source;
}

它 100% 的时间(目前)有效,但是如果我使用此方法获取图像,以便将其写入磁盘怎么办?

用上面的方法,我得到了类似的东西

"�PNG\r\n\u001a\n[=11=][=11=][=11=]\rIHDR[=11=][=11=]\u0001�[=11=][=11=][=11=]�\b\u0006..."

完全正常。如您所见,这是我正在等待的 PNG 图片,作为字符串、Unicode 等等,但不是我需要的格式。

我想在将图像写入磁盘之前对其进行操作,因此我需要源作为字节数组,以便与

一起使用
using MagickImage image = new(data)

所以问题是:

如何获取字节数组形式的远程文件,就像我将 HttpClient 与

一起使用一样
HttpContent.ReadAsByteArrayAsync().GetAwaiter().GetResult().ToArray()

但使用 CefSharp,因为 CloudFlare ?

谢谢!

感谢amaitland for about DownloadUrlAsync()

我现在可以获取位于 CloudFlare 后面的任何资源,作为字符串或字节[],用这个:

public static object GetCefSource(string url, bool asByteArray = false)
{
    Browser.Load(url); //An instance of ChromiumWebBrowser
    Thread.Sleep(15000); //Wait for CloudFlare's Javascript to execute
    object result = Browser.GetSourceAsync().ConfigureAwait(true).GetAwaiter().GetResult();

    if (asByteArray)
    {
        IFrame mainFrame = Browser.GetMainFrame();
        result = mainFrame.DownloadUrlAsync(url).ConfigureAwait(true).GetAwaiter().GetResult();
    }

    return result;
}

我可能会用 Thread.Sleep() 的替代方法重写它,并且不会将结果装箱在对象中。

谢谢!