一、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. 字符串自实现(一)(mystrcpy,mystrcat,mystrcmp)

    char* mystrcpy(char* str_one,const char* str_two) { char* tmp = str_one; while (*str_one++ = *str_tw ...

  2. 多线程-线程间通信-多生产者多消费者问题解决(notifyAll)

    1 package multithread4; 2 3 /* 4 * 生产者,消费者. 5 * 6 * 多生产者,多消费者的问题. 7 * 8 * if判断标记,只有一次,会导致不该运行的线程运行了. ...

  3. vue 项目npm run dev ip访问

    webpack npm run dev 不能通过ip访问 只能通过localhost访问 解决方法如下: 修改vue-cli: config/index.js 文件 把文件中 host 的值,改成 i ...

  4. 数据库查询语句遇到:Unknown column 'XXXX' in 'where clause'解决方法

    数据库查询语句遇到:Unknown colunm 'XXX' in 'where clause'解决方法 根本原因:可能是sql语句所用到的数据类型错误(int与String)弄错- 我的情况: 在网 ...

  5. python基础详解

    python基础部分 python基础一 python基础二 Python最详细,最深入的代码块小数据池剖析 深浅copy python文件操作 python函数部分 python函数初识 pytho ...

  6. ApacheCN JavaWeb 译文集 20211017 更新

    使用 Spring5 构建 REST Web 服务 零.前言 一.一些基本知识 二.在 Spring5 中使用 Maven 构建 RESTfulWeb 服务 三.Spring 中的 Flux 和 Mo ...

  7. IntelliJ IDEA 中文官方文档

    目录 认识IntelliJ IDEA IntelliJ IDEA 安装和设置 IntelliJ IDEA如何使用 IntelliJ IDEA中不容错过的快捷键 IntelliJ IDEA专业的使用技巧 ...

  8. .NET 诞生已20周年,您的 .NET 技能是否还停留在2010 年?

    20年来,我们见证了超过上千万.NET 开发员,当前有600万.NET 开发者正在使用.NET技术构建各类解决方案.今天,IT市场对.NET 开发人员的需求达到了前所未有的程度,特别是在中国,各大公司 ...

  9. CF1278E Tests for problem D

    不难发现为了逐步确定每个点于其相邻点的相交情况,那么我们只可能有两种逐步构造的方式:从根开始往下构造,以及从子树往根上构造.经过很久的尝试,我发现从根往下构造是一件很困难的事情,于是我们可以反过来考虑 ...

  10. smartimageview 的原理

    自定义的控件在布局文件中的引用都需要指定类的完整路径 1.自定义了一个MyImageview类继承了Imageview,添加三个构造方法     2.添加一个setImageUrl方法接受一个图片ur ...