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