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