ChromiumWebBrowser 如何取出js变量的值
时间: 2024-02-13 19:00:12 浏览: 82
你可以使用 ChromiumWebBrowser 的 EvaluateScriptAsync 方法来获取 JavaScript 变量的值。该方法接受一个字符串类型的 JavaScript 代码作为参数,并返回一个 Task 对象。你可以使用 await 关键字等待该方法的执行完成,并将结果存储在一个变量中。
下面是一个示例代码,演示了如何获取 JavaScript 变量的值:
```
// 在 ChromiumWebBrowser 中执行 JavaScript 代码并获取变量的值
public async Task<object> GetVariableValue(string variableName)
{
string script = $"window.{variableName}";
var response = await browser.EvaluateScriptAsync(script);
return response.Result;
}
```
在上面的代码中,我们使用 window 对象来获取变量的值。你可以将 variableName 替换为你要获取的变量名。注意,这种方法只适用于在当前页面中已经定义了该变量的情况。如果该变量未定义,该方法将返回 null。
相关问题
cefsharp调用js获取返回值
### 回答1:
CefSharp是一个.NET包装器,它提供了对Chromium浏览器的访问。要调用javascript获取返回值,可以使用CefSharp的ExecuteScriptAsync()方法。该方法以脚本字符串作为参数,并返回Task类型的结果。这意味着您可以异步调用javascript函数,并在调用成功后获取返回值。
在执行javascript代码后,您将获取一个JavascriptResponse对象,其中包含执行结果的字符串值和一个布尔值,指示脚本是否成功在浏览器中运行。如果脚本未成功执行,则会提供一个错误消息。
以下是一个简单的示例,它演示了如何使用CefSharp执行一个简单的javascript函数并获取返回值:
```csharp
var task = browserControl.ExecuteScriptAsync("document.title");
task.ContinueWith(t =>
{
if (!t.IsFaulted)
{
var response = t.Result;
if (response.Success && response.Result != null)
{
//获取返回值
var result = response.Result.ToString();
MessageBox.Show(result);
}
else if (!response.Success)
{
//输出错误消息
MessageBox.Show(response.Message);
}
}
}, TaskScheduler.FromCurrentSynchronizationContext());
```
在这个示例中,我们使用ExecuteScriptAsync()方法执行了一个简单的javascript代码(获取页面的标题),并使用ContinueWith()方法处理返回值。在ContinueWith()方法中,我们检查返回的JavascriptResponse对象是否包含成功的结果,如果是,我们将结果存储在result变量中并显示在一个消息框中。
总之,CefSharp可以让我们方便的访问Chromium浏览器的功能,包括执行javascript代码并获取返回值。通过使用.ExecuteScriptAsync()方法,我们可以异步执行javascript代码,并在获取结果后轻松处理返回的JavascriptResponse对象。
### 回答2:
cefsharp是一款基于Chromium开源浏览器的.NET框架,它提供了一种方便的方式来嵌入浏览器引擎到你的应用程序中。如果想要使用cefsharp调用JS获取返回值,首先需要在.NET平台上使用C#编写代码。
我们可以通过cefsharp提供的接口获取浏览器引擎对象,然后通过该对象调用浏览器引擎中的JavaScript接口。最简单的方式是使用CEFSharp.DevTools,它提供了一系列的方法来处理JavaScript代码并返回结果。例如:
```csharp
using CefSharp;
using CefSharp.DevTools;
using CefSharp.DevTools.DOM;
var browser = new ChromiumWebBrowser("http://www.google.com");
//等待浏览器加载完成
browser.FrameLoadEnd += (sender, e) =>
{
if (e.Frame.IsMain)
{
browser.ExecuteScriptAsync("document.body.style.zoom = \"200%\";");
var dom = browser.GetMainFrame().GetDevToolsSession();
var result = dom.EvaluateScriptAsync("document.title");
//通过Task异步等待返回结果
result.ContinueWith(task =>
{
Console.WriteLine(result.Result.Result.Value);
},
TaskContinuationOptions.OnlyOnRanToCompletion);
}
};
```
上述代码中,通过CreateDevToolsSessionAsync方法获取到DevToolsSession对象(即浏览器页面的DOM),然后通过EvaluateScriptAsync方法执行JS代码,最后通过ContinueWith方法等待返回结果。在这个例子中,我们通过执行document.title代码,读取了当前页面的标题信息。
需要注意的是,CEFSharp.DevTools仅在Chrome 63或以上版本中提供支持。如果您要运行旧版本的Chrome,请参考CEFSharp.CefSharpExtensions来实现类似的JavaScript代码处理。
阅读全文