Ravi Kiran
Ravi Kiran

Reputation: 585

CefSharp - Get Value of HTML Element

How can I get the value of an HTML element with CefSharp?

I know how to do with this default WebBrowser Control:

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

But I didn't find anything similar for CefSharp. The main reason I am using CefSharp is because part of the website is using iframes to store the source and default WebBrowser doesn't support it. Also, does CefSharp have an option to InvokeMember or similar call?

I'm using the latest release of CefSharp by the way.

Upvotes: 10

Views: 49462

Answers (5)

Triệu Đô La
Triệu Đô La

Reputation: 2481

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();
        }
    }
});

It working for me.

Upvotes: 0

berkhan
berkhan

Reputation: 23

This worked for me. You can modify it by yourself.

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

Maybe this can do your job.

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

Upvotes: 2

i31nGo
i31nGo

Reputation: 1502

this is the only way that worked for me, version 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);
        }
    }

Upvotes: 3

RobbZ
RobbZ

Reputation: 1410

There is a really good example of how to do this in their FAQ.

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

Here is the code for the lazy. Pretty self explanatory and it worked well for me.

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.
        }      
    });

Upvotes: 14

HigHwind
HigHwind

Reputation: 21

With CefSharp,you can get elements' value by javascript.

For example,

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

About javascript,you can learn it from w3s.

And I think you should read this passage.

Have fun.

Upvotes: 0

Related Questions