CefSharp是什么
- A framework for embedding web-browsing-like capabilities to a standard .NET application (WPF or Windows Forms).
- A set of high-level custom controls to make it reasonably easy to integrate these capabilities in your application.
- Built on top of CEF, the Chromium Embedded Framework by Marshall A. Greenblatt.
- CefSharp does little more than package CEF in a nice convenient .Net Wrapper.
- 以上是原文,其實就是一個瀏覽器核心,類似WebKit東西,然后可以嵌入程序中,方便咱們開發使用了
為什么用CefSharp
- CefSharp加載完成后,獲取的是加載完成后的網頁源代碼,相當於google瀏覽器F12看到的源代碼哦
- 這樣,就不用分析對方瀏覽器如何加密的,獲取到的數據,直接就是用戶看到的最終數據
如何安裝
- .net程序 右鍵---管理Nuget應用程序包--搜索CefSharp---安裝
- 程序最低依賴是.net4.5.2
- 必須使用x86或者x64編譯環境
初始化並使用
static ChromiumWebBrowser browser; var settines = new CefSettings() { Locale = "zh-CN", AcceptLanguageList = "zh-CN", MultiThreadedMessageLoop = true }; Cef.Initialize(settines); browser = new ChromiumWebBrowser("www.baidu.com");//指定初始化地址 this.panel1.Controls.Add(browser); browser.Dock = DockStyle.Fill; //加載開始事件 browser.FrameLoadStart += Browser_FrameLoadStart; //加載完成后事件 browser.FrameLoadEnd += Web_FrameLoadEnd;
跳轉到指定地址
browser.Load("www.qq.com");
加載完成事件
private async void Web_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) { //一個網頁會調用多次,需要手動自己處理邏輯 var url = e.Url; var result = await browser.GetSourceAsync(); var html = result; }
調用JS
browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("alert('這是c#調用的js,給文本框賦值!')"); browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('kw').value='在C#里面給頁面文本框進行賦值'"); //你可以做你任何想做的事了
全部源代碼
namespace WindowsFormsApp2 { public partial class Form1 : Form { static ChromiumWebBrowser browser; public Form1() { InitializeComponent(); DataInit(); } /// <summary> /// 初始化 /// </summary> public void DataInit() { var settines = new CefSettings() { Locale = "zh-CN", AcceptLanguageList = "zh-CN", MultiThreadedMessageLoop = true }; Cef.Initialize(settines); browser = new ChromiumWebBrowser("www.baidu.com");//指定初始化地址 this.panel1.Controls.Add(browser); browser.Dock = DockStyle.Fill; //加載開始事件 browser.FrameLoadStart += Browser_FrameLoadStart; //加載完成后事件 browser.FrameLoadEnd += Web_FrameLoadEnd; } private void Browser_FrameLoadStart(object sender, FrameLoadStartEventArgs e) { var url = e.Url; } private void button1_Click(object sender, EventArgs e) { browser.Load(txt_Url.Text); } private async void Web_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) { //一個網頁會調用多次,需要手動自己處理邏輯 var url = e.Url; var result = await browser.GetSourceAsync(); var html = result; ////調用js //browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("alert('這是c#調用的js,給文本框賦值!')"); ////txtAccount //browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('kw').value='在C#里面給頁面文本框進行賦值'"); } } }