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

标签 javascript c# web chromium-embedded cefsharp

我正在尝试使用 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 删除 if 语句。
然后在 EvaluateScriptAsync 之后使用相应的浏览器对象调用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);

关于javascript - 尝试使用 JavaScript 在 CefSharp3 (OffScreen) 中模拟用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45587322/

相关文章:

javascript - Uncaught ReferenceError : $ is not defined while Adding webticker

javascript - 在 AJAX 调用后使用 DOM

c# - 具有相同元素类型和等级的数组类型不相等

c# - 等价于 C++ 的#region

c# - VS 2015 中的连接字符串

java - JSP 和外部 javascript 文件之间的交互

php - 当网页上下载 pdf 链接时增加 SQL 数据库中的值

javascript函数防止默认问题

html - 使用 Grunt.js 的部分静态 HTML 编译

Javascript 比另一个属性上的 XSLT generate-id() 更好地识别回调节点