首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CefSharp EvaluateScriptAsync总是返回null

CefSharp EvaluateScriptAsync总是返回null
EN

Stack Overflow用户
提问于 2019-08-23 22:35:44
回答 1查看 5.3K关注 0票数 3

我试图获取存储在页面("https://www.avanza.se/aktier/om-aktien.html/31607/ica-gruppen")上的财务数据。

把这个问题再弄清楚一点。

然后,我尝试将CEFSHARP浏览器中的数据点返回到C#。

代码语言:javascript
复制
 const string script = @"(function() 
 {   
    var data = this.Highcharts.charts[0].series[0].points;

    return data;
 })();";

browser.EvaluateScriptAsync(script).ContinueWith(x =>
{
    var response = x.Result;

    if (response.Success && response.Result != null)
    {
       //Saving the data to a database.
    }
});

此返回空或未定义。然后我试着在所有可用的地方检查一下钥匙。代码如下。

代码语言:javascript
复制
browser.FrameLoadEnd += testing;

 private void testing(object sender, FrameLoadEndEventArgs args)
    {
        const string scriptet = @"(function() { var body = window; return Object.keys(body) + ' ' + 'Empty'; })();";


        browser.GetMainFrame().EvaluateScriptAsync(scriptet).ContinueWith(y =>
        {
            var response = y.Result;

            if (response.Success && response.Result != null)
            {
                var onePlusOne = (int)response.Result;

            }

        });
    }

我得到了所有的基本键,但是没有一个与页面相关。

我在devtools中尝试了同样的方法,运行以下命令:

代码语言:javascript
复制
Object.keys(window)

EN

回答 1

Stack Overflow用户

发布于 2019-12-08 02:59:18

为了解决这个问题,你应该考虑以下几点:

  • 等待直到页面完全加载。
  • 等待图表加载数据足够了。
  • 将数据字段项目到自定义对象的新数组中(就像在linq中所做的那样)

然后你可以从图表中得到数据:

代码语言:javascript
复制
ChromiumWebBrowser browser;
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    browser = new ChromiumWebBrowser(
        "https://www.avanza.se/aktier/om-aktien.html/31607/ica-gruppen");
    browser.LoadingStateChanged += Browser_LoadingStateChanged;
    browser.Dock = DockStyle.Fill;
    Controls.Add(browser);
}

private async void Browser_LoadingStateChanged(object sender, 
    LoadingStateChangedEventArgs e)
{
    if(!e.IsLoading)
    {
        await Task.Delay(5000);
        var script = @"
            (function () {
                var data = Highcharts.charts[0].series[0].points;
                return Array.from(data, p => ({x:p.x, y:p.y, name: p.name}));
            })();";
        var result = await browser.EvaluateScriptAsync(script);
        MessageBox.Show($"{((dynamic)result.Result).Count}");
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57633701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档