我正在尝试使用 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/