2016-06-08 2661 views
2

如何使用CefSharp獲得HTML元素的值?CefSharp - 獲取HTML元素的價值

我知道如何與這個默認WebBrowser控件做:

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

但我沒有找到CefSharp類似的事情。我使用CefSharp的主要原因是因爲網站的一部分使用iframe來存儲源代碼,默認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

我從來沒有設法得到browser.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); 
     } 
    }