2016-06-08 397 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); 
     } 
    }