- 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#里面给页面文本框进行赋值'");
}
}
}