Свойство 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);
}
}
}