尝试使用 JavaScript 在 CefSharp3 (OffScreen) 中模拟用户输入

Trying to simulate user inputs in CefSharp3 (OffScreen) using JavaScript

我正在尝试使用 JavaScript 在 CefSharp(OffScreen) 上模拟用户操作。

加载页面后 (https://www.w3.org),
我正在尝试在搜索栏中搜索,
单击搜索按钮
打开第一个结果

所以我用过,

            await browser.EvaluateScriptAsync("document.getElementsByName('q')[0].value = 'CSS';");
            await browser.EvaluateScriptAsync("document.getElementById('search-submit').click();");
            await browser.EvaluateScriptAsync("document.getElementById('r1-0').click();");

但我面临的问题是,要截屏,我必须在页面加载之间和末尾使用 Thread.Sleep(x)在进行下一步操作之前或截图。

有没有办法避免SLEEP并检测加载完成后进行下一步操作?

我也尝试了 ExecuteScriptAsync,同样的问题。

您可以为此目的修改和使用 OffScreenExample 中的 LoadPageAsync() 函数。
只需通过删除 url 来替换更改参数,因为您不会使用它,并使用 url[=28 删除 if 语句=].
然后在 EvaluateScriptAsync 之后使用相应的 browser 对象调用 LoadPageAsync

修改后的函数如下所示

public static Task LoadPageAsync(IWebBrowser browser)
{
    var tcs = new TaskCompletionSource<bool>();

    EventHandler<LoadingStateChangedEventArgs> handler = null;
    handler = (sender, args) =>
    {
        if (!args.IsLoading)
        {
            browser.LoadingStateChanged -= handler;
            tcs.TrySetResultAsync(true);
        }
    };

    browser.LoadingStateChanged += handler;
    return tcs.Task;
}

用法就像,

await browser.EvaluateScriptAsync("document.getElementsByName('q')[0].value = 'CSS';");
await browser.EvaluateScriptAsync("document.getElementById('search-submit').click();");
await LoadPageAsyncCompleted(browser);
await browser.EvaluateScriptAsync("document.getElementById('r1-0').click();");
await LoadPageAsyncCompleted(browser);