Свойство window.screen.colorDepth для CefSharp Offscreen

Итак, я хотел бы создать неэкранный скребок CefSharp, который будет сложно обнаружить по отпечаткам пальцев. Однако когда я использую его, чтобы открыть https://amiunique.org/fp и нажать "Просмотреть дополнительную информацию", мое разрешение экрана отображается как "1366x768x0", что означает, что свойство colorDepth моего браузера установлено в ноль.

Как это

Я предполагаю, что мне нужно либо включить какую-то графическую опцию в настройках, либо переопределить свойство window.screen чем-то вроде

window.screen = new function() { this.colorDepth = 24, this.pixelDepth = 24};

Но ничего из этого, похоже, не работает. Есть ли способ исправить это, или, может быть, какой-то обходной путь?

Пример кода:

public static bool SiteReady;

static void Main(string[] args)
{
    Cef.Initialize();
    Task.Run(async () => await Scrape()).Wait();
    Helper.Log("Done!");
    Console.ReadLine();
}

public static async Task Scrape()
{
    using (var browser = new ChromiumWebBrowser("https://amiunique.org/fp"))
    {
        SiteReady = false;

        // create the loading handler
        EventHandler<LoadingStateChangedEventArgs> handler = null;
        handler = async (sender, args) =>
        {
            if (args.IsLoading) return;
            var view = (ChromiumWebBrowser)sender;
            view.LoadingStateChanged -= handler;

            // wait for the page to load completely
            await Task.Delay(20000);

            // change the window size to fit all displayed data
            view.Size = new Size(2000, 2500);

            // click the "view more details" button and wait for the next page to load
            await view.EvaluateScriptAsync("document.getElementById('detBut').click();");

            await Task.Delay(1000);

            while (view.IsLoading)
            {
                await Task.Delay(10);
            }

            // save the screenshot
            using (var task = await view.ScreenshotAsync())
            {
                task.Save("C:/Screens/screenshot.png");
            }

            // indicate that we are done with the page
            SiteReady = true;
        };

        browser.LoadingStateChanged += handler;

        while (SiteReady != true)
        {
            await Task.Delay(10);
        }
    }
}

0 ответов

Другие вопросы по тегам