gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:16:55 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com