一、CefSharp介绍

CEF 全称是Chromium Embedded Framework(Chromium嵌入式框架),是个基于Google Chromium项目的开源Web browser控件,支持Windows, Linux, Mac平台。CEFSharp就是CEF的C#移植版本。

就是一款.Net编写的浏览器包,方便你在Winform和WPF中内嵌的Chrome浏览器组件

资源

GitHub地址:https://github.com/cefsharp/CefSharp
中文帮助文档地址:https://github.com/cefsharp/CefSharp/wiki/CefSharp%E4%B8%AD%E6%96%87%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3
CefSharp的WinForm样例:https://github.com/cefsharp/CefSharp/tree/master/CefSharp.WinForms.Example
gitter交流讨论区:https://gitter.im/cefsharp/CefSharp

1、安装

使用Nuget包引用

3.把项目改成64位

切换到X64

安装完之后工具栏应该会多出来这个控件(直接拖动用不了!)

二、使用

1、获得页面源代码

注意:

1、GetSourceAsync获取源码的方法是异步操作

2、判断页面加载完成,会触发FrameLoadEnd页面加载完成事件。使用CEF无法确定一个网站是否已经完全加载完成,我们只能在它每一次加载完成时,处理它的页面源码。(如果需要主动等待网站加载完成,可以试试使用Selenium

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
        ChromiumWebBrowser WebBrowser;
        private void Form1_Load(object sender, EventArgs e)
{
var settings = new CefSettings()
{
UserAgent = "Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Mobile Safari/537.36",
}; //Perform dependency check to make sure all relevant resources are in our output directory.
Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null); // cefsharp提供的浏览器控件,一般用它充满窗口就搞定了
WebBrowser = new ChromiumWebBrowser("http://www.163.com")
{
// 填充整个父控件
Dock = DockStyle.Fill
};
WebBrowser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(FrameEndFunc); // 添加到窗口的控件列表中
this.panel1.Controls.Add(WebBrowser); }
private void FrameEndFunc(object sender, FrameLoadEndEventArgs e)
{
MessageBox.Show("加载完毕");
this.BeginInvoke(new Action(() =>
{
String html = WebBrowser.GetSourceAsync().Result;
richTextBox1.Text = html;
}));
} private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
// 结束时要销毁
Cef.Shutdown();
}
}
}

效果:可以加载很多原生webbrowser不能加载的内容 可以适应iframe

2、执行页面中的js函数

测试的js代码

<html>
<body>
<button type="button" onclick="test(1,2)">测试按钮</button>
</body>
<script type="text/javascript">
function test(a,b)
{
var c = testfunc(a,b);
alert(c);
}
function testfunc(a,b)
{
return a+b;
} </script>
<html>

调用页面中的testfunc函数

private void button3_Click(object sender, EventArgs e)
{
using (StreamReader sr = new StreamReader("JavaScript1.html"))
{
string html = sr.ReadToEnd();
WebBrowser.LoadHtml(html, "http://testpage/");
}
} private void button4_Click(object sender, EventArgs e)
{
String script = "testfunc(99,1)";
var result = this.WebBrowser.EvaluateScriptAsync(script).Result.Result;
MessageBox.Show(result.ToString());
}

效果

3、常用方法

//浏览网址:
WebBrowser = new ChromiumWebBrowser("https://www.baidu.com");
// 或
WebBrowser.Load("https://www.baidu.com");
// 获取HTML(整体):
WebBrowser.GetSourceAsync().Result;
 // 获取HTML(特定Frame):
WebBrowser.GetBrowser().GetFrame(“SI2_mem_index”).GetSourceAsync().Result;
//执行网页上的JavaScript:
ExecuteJavaScriptAsync("document.getElementById('username').onkeydown();");
 //模拟左键点击:
WebBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Left, false, 1, CefEventFlags.None);
Thread.Sleep(50);
WebBrowser.GetBrowser().GetHost().SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None);

学习实例地址:https://github.com/zhaotianff/CSharpCrawler

C#爬虫(02):Web browser控件CefSharp的使用的更多相关文章

  1. 关于PB调用Microsoft Web Browser控件的一些问题

    Microsoft Web Browser控件是WINDOWS系统自带的控件,一般不需要单独安装,由于工作的需要,把使用中遇到的问题记录一下,以便查阅. 插入控件: 环境为PB12.0,insert- ...

  2. 改变Web Browser控件IE版本

    默认的webbrowser控件使用的渲染模式版本似乎是IE7,想要更改更高版本,如下: 在注册表位置 HKEY_CURRENT_USER\Software\Microsoft\Internet Exp ...

  3. 如何在PB中调用 Microsoft WEB 浏览器 控件?

    PB中使用Microsoft Web Browser控件步骤: 在pb的某窗口中加入OLE对象,选择Insert control(插入控件),然后选中"Microsoft WEB 浏览器&q ...

  4. ASP.NET Web数据控件

    ASP.NET Web数据控件 1.数据控件简介 这包括数据源控件和格式设置控件,前者使您可以使用 Web 控件访问数据库中的数据,后者使您可以显示和操作ASP.NET 网页上的数据.  2.数据控件 ...

  5. Web打印控件

    Lodop是什么? 有人说她是Web打印控件,因为她能打印.在浏览器中以插件的形式出现,用简单一行语句就把整个网页打印出来: 有人说她是打印编程接口,因为她介于浏览器和打印设备之间,是个通道和桥梁,几 ...

  6. [转]Oracle分页之二:自定义web分页控件的封装

    本文转自:http://www.cnblogs.com/scy251147/archive/2011/04/16/2018326.html 上节中,讲述的就是Oracle存储过程分页的使用方式,但是如 ...

  7. 在网页中编辑报表的报表设计器Stimulsoft Reports Designer.Web报表控件

    Stimulsoft Reports Designer.Web报表控件是一款网页报表设计器.您想在网页中编辑您的报表吗?现在是可能的! Stimulsoft Reports Designer.Web ...

  8. Web打印控件smsx.cab使用说明

    在项目开发中,经常会用到页面打印的功能,在ASP.NET环境下推荐一款web打印控件smsx.cab.    使用方法:一般会先定义一个用于打印的母版页(Print.Master),在母版页上做好布局 ...

  9. 网页WEB打印控件

    网页WEB打印控件制作 在WEB系统中,打印的确是比较烦人的问题,如果我们能制作一个属于自己的自定义的打印插件,那么我们在后续自定义打印的时候能随心所欲的控制打印,这样的效果对于程序员来说是非常开心的 ...

随机推荐

  1. Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值

    本文为博主原创,转载请注明出处: 最近在进行压测,为了观察并定位服务性能的瓶颈,所以在代码中很多地方加了执行耗时的日志,但这种方式只能观察,却在压测的时候,不太能准确的把握代码中某些方法的性能,所以想 ...

  2. 集合框架-工具类-Collections-其他方法将非同步集合转成同步集合的方法

    集合框架TXT  Collections-其他方法将非同步集合转成同步集合的方法

  3. 新年好 takoyaki,期待再次与你相见

    一.序 今天是中国农历一年的最后一天,往年都叫年三十,今年没有三十,最后一天是二十九.厨房的柴火味.窗外的鞭炮声还有不远处传来的说笑声,一切都是熟悉味道,新年到了,家乡热闹起来了.平常左邻右舍都是看不 ...

  4. Homework_3 (完整版)

    划水‍♂️!好耶! 果然还是逃不过作业,初三刚过就要营业 审题 爬虫+算法:划水中的员工 员工 A 此刻内心一酸,大年初一加班惨绝人寰,情不自禁打开 B 站,跟着网友一起划水看番. 但是由于技术故障原 ...

  5. python 元组tuple介绍,使用。

    原文 https://blog.csdn.net/ruanxingzi123/article/details/83184909 一  是什么? # python 元组tuple? ''' 元祖tupl ...

  6. Codeforces Round #738 (Div. 2)

    Codeforces Round #738 (Div. 2) 跳转链接 A. Mocha and Math 题目大意 有一个长度为\(n\)的数组 可以进行无数次下面的操作,问操作后数组中的最大值的最 ...

  7. 最长公共子序列-LIS

    题目描述 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个长为\(n\)的序列,求它的最长上升子序列的长度. 输入格式 输入第一行包含一个整数\(n\). 第二行包含\(n\)个整数\ ...

  8. JavaCV的摄像头实战之六:保存为mp4文件(有声音)

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  9. WebService、Http请求、Socket请求

    WebService 定义 一种web程序访问方式,常见协议:SOAP(简单对象访问协议),其实就是Http+XML.利用对象进行数据交互. 请求方法 import lombok.extern.slf ...

  10. Kubernetes二进制(单/多节点)部署

    Kubernetes二进制(单/多节点)部署 目录 Kubernetes二进制(单/多节点)部署 一.常见的K8S部署方式 1. Minikube 2. Kubeadmin 3. 二进制安装部署 4. ...