2016-06-08 12 views
2

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

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

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

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

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

+0

Вы должны бросить документ MSHTML.IHTMLDocument2 , если я правильно помню. –

+0

Прочтите «Вопросы по CefSharp» для начинающих. Вы должны помнить, что это не похоже на замену встроенного элемента управления. – amaitland

+0

Вы пробовали 'HtmlElement Elem = webBrowser1.Document.GetElementById (" id ");' –

ответ

-2

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

Например,

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

О JavaScript, вы можете узнать его из w3s.

И я думаю, вы должны прочитать this passage.

Удачи.

+6

Это не возвращает никакого значения. –

3

Существует действительно хороший пример того, как это сделать в их FAQ.

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

Вы протестировали это? – Nulle

+0

Да, значит, «это сработало хорошо для меня» – RobbZ

+0

Мне никогда не удавалось получить браузер. EvaluateScriptAsync (скрипт) пока не работает. browser.GetMainFrame.ExecuteJavascriptAsync (скрипт) у меня есть. – Nulle

-1

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