CefSharp — получить значение HTML-элемента

Как я могу получить значение элемента HTML с помощью CefSharp?

Я знаю, как это сделать с этим элементом управления WebBrowser по умолчанию:

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

Но ничего подобного для CefSharp я не нашел. Основная причина, по которой я использую CefSharp, заключается в том, что часть веб-сайта использует iframe для хранения источника, а веб-браузер по умолчанию не поддерживает его. Кроме того, есть ли у CefSharp возможность InvokeMember или аналогичный вызов?

Кстати, я использую последнюю версию CefSharp.


person Ravi Kiran    schedule 08.06.2016    source источник
comment
Вы должны преобразовать документ в MSHTML.IHTMLDocument2, если я правильно помню.   -  person JWP    schedule 09.06.2016
comment
Прочтите CefSharp FAQ для начала. Вы должны помнить, что это маловероятно для замены встроенного управления.   -  person amaitland    schedule 09.06.2016
comment
ты пробовал HtmlElement Elem = webBrowser1.Document.GetElementById("id");   -  person sujith karivelil    schedule 09.06.2016


Ответы (5)



это единственный способ, который сработал для меня, версия 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);
        }
    }
person i31nGo    schedule 18.01.2018

Это сработало для меня. Вы можете изменить его самостоятельно.

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
}
person berkhan    schedule 11.03.2020

С CefSharp вы можете получить значение элементов с помощью javascript.

Например,

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

О javascript вы можете узнать на сайте w3s.

И я думаю, вам следует прочитать это проход.

Повеселись.

person HigHwind    schedule 19.06.2016
comment
Это не возвращает никакого значения. - person Andreas Furster; 09.11.2016

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

Это работает для меня.

person Triệu Đô La    schedule 16.03.2020