CefSharp 浏览器核心,爬虫
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#里面给页面文本框进行赋值'"); } } }