CefSharp - 获取HTML元素的价值

时间:2016-06-08 21:07:30

标签: c# vb.net cefsharp

如何使用CefSharp获取HTML元素的值?

我知道如何处理这个默认的WebBrowser控件:

Dim Elem As HtmlElement = WebBrowser1.Document.GetElementByID("id")

但我没有找到类似的CefSharp。我使用CefSharp的主要原因是因为网站的一部分使用iframe来存储源,而默认的WebBrowser不支持它。此外,CefSharp是否可以选择InvokeMember或类似的呼叫?

顺便说一句,我正在使用最新版本的CefSharp。

5 个答案:

答案 0 :(得分:10)

在他们的常见问题解答中有一个很好的例子。

https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-questions#2-how-do-you-call-a-javascript-method-that-return-a-result

这是懒惰的代码。非常自我解释,对我来说效果很好。

string script = string.Format("document.getElementById('startMonth').value;");
browser.EvaluateScriptAsync(script).ContinueWith(x =>
        {
            var response = x.Result;

            if (response.Success && response.Result != null)
            {
            var startDate = response.Result;
            //startDate is the value of a HTML element.
        }      
    });

答案 1 :(得分:1)

这对我有用。您可以自己修改它。

private async void TEST()
{
    string script = "document.getElementsByClassName('glass')[0]['firstElementChild']['firstChild']['wholeText']";
    JavascriptResponse response = await browser.EvaluateScriptAsync(script);
    label1.Text = response.Result.ToString();
}

也许这可以完成您的工作。

private async void TEST()
{
    string script = "Document.GetElementByID('id').value";
    JavascriptResponse response = await browser.EvaluateScriptAsync(script);
    string resultS = response.Result.ToString(); // whatever you need
}

答案 2 :(得分:0)

这是对我有用的唯一方法,版本57.0.0.0 ..

((CefSharp.Wpf.ChromiumWebBrowser)chromeBrowser).FrameLoadEnd += Browser_FrameLoadEnd;

...

async void Browser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
    {            
        Console.WriteLine("cef-"+e.Url);

        if (e.Frame.IsMain)
        {                 
            string HTML = await e.Frame.GetSourceAsync();               
            Console.WriteLine(HTML);
        }
    }

答案 3 :(得分:0)

string script = @"document.getElementById('id_element').style;";
browser.EvaluateScriptAsync(script).ContinueWith(x=> {
    var response = x.Result;
    if (response.Success && response.Result != null)
    {
        System.Dynamic.ExpandoObject abc = (System.Dynamic.ExpandoObject)response.Result;
        foreach (KeyValuePair<string,object> item in abc)
        {
            string key = item.Key.ToString();
            string value = item.Value.ToString();
        }
    }
});

对我有用。

答案 4 :(得分:-1)

使用CefSharp,您可以通过javascript获取元素的价值。

例如,

m_browser.ExecuteScriptAsync("document.GetElementById('id1');");

关于javascript,您可以从w3s了解它。

我认为你应该阅读this passage

玩得开心。