javascript - 如何在 c# 中使用 chromium 网络浏览器获取 javascript 的返回值
问题描述
如何使用铬 Web 浏览器获取 javascript 的返回值。我知道如何为 DOM 元素赋值。但我不知道如何使用 cef sharp 获取 DOM 元素的值。我的示例代码是这样的。
//chromeBrowser = ChromiumWebBrowser object
String script =
string.Format("document.getElementsByName('DOMElementName')
[0].value;");
chromeBrowser.EvaluateScriptAsync(script).ContinueWith(x =>
{
// I want to use the returned value of the script above
});
我怎样才能做到这一点。
解决方案
你可能对他们在 GitHub 上的官方 CefSharp FAQ感兴趣。
您需要等待FrameLoadEnd
事件触发。只有在那之后,您才能评估脚本。然后EvaluateScriptAsync
用你想在框架上执行的脚本字符串调用,然后你会得到一个包含操作结果的任务。
browser.FrameLoadEnd += (sender, args) =>
{
var task = args.frame.EvaluateScriptAsync(script, null);
task.ContinueWith(t =>
{
if (!t.IsFaulted)
{
var response = t.Result;
var result = = response.Success ? (response.Result ?? "null") : response.Message;
// TODO: do something with the result
}
}, TaskScheduler.FromCurrentSynchronizationContext());
};
推荐阅读
- reactjs - 如何在 Next.js 中进行代码拆分 redux?
- python - imblearn smote+enn 对多数类的采样不足
- c# - 如何在控制器中访问 IApplicationBuilder?
- r - 将标记转换为等级到 R
- python - Python:如何比较 hashlib lib 和 hmac lib 消息摘要
- r - 在 R 中使用 plotly 实现线图的平滑过渡
- python - 如何将趋势线绘制为日期的函数?
- r - 如何从R中向量中的每个文本中提取符号
- django - 如何根据不同的请求设置不同的 paginate_by?
- c# - 如何使 Listview 与 Xamarin Forms 中的堆栈布局重叠?