之前一直使用WPF自带的WebBrowser控件,但由于它使用的是IE内核,巨无敌难用,还各种报错。于是换了一个开源的浏览器包CefSharp,它支持Winform和WPF,内嵌了Chrome浏览器组件并且有比较详细的说明文档。

  • 开源项目地址

  • 官方中文帮助文档

安装

  1. 通过Nuget安装,右击项目 -> 管理Nuget程序包 -> 在打开的界面中搜索CefSharp,依次安装 CefSharp.CommonCefSharp.Wpf ,至于 cef.redist.x64cef.redist.x86会自动安装。

  1. 配置解决方案平台

    因为CefSharp不支持ANYCPU所以要配置x86、x64,点击菜单生成 -> 配置管理器。选择解决方案平台,点击编辑,先将x64和x86删掉,再重新新建,重新配置比较容易些。

使用

使用时可以直接在xaml文件中直接添加ChromiumWebBrowser控件,不过ChromiumWebBrowser控件特别消耗内存,所以代码里动态添加也是一种不错的选择。

在xaml中添加浏览器

  1. xmal文件头部插入引用xmlns:wpf="clr-namespace:CefSharp.Wpf;assembly=CefSharp.Wpf",添加控件如下:

    <Grid x:Name="ctrlBrowerGrid"><wpf:ChromiumWebBrowser x:Name="Browser"/>
    </Grid>
    
  2. cs文件中操作控件访问网址:

    Browser.Load(“www.baidu.com”);
    

动态添加浏览器

  1. 添加浏览器类:

    internal sealed class CollapsableChromiumWebBrowser : ChromiumWebBrowser
    {public CollapsableChromiumWebBrowser(){this.Loaded += this.BrowserLoaded;}private void BrowserLoaded(object sender, System.Windows.RoutedEventArgs e){// Avoid loading CEF in designerif (DesignerProperties.GetIsInDesignMode(this))return;// Avoid NRE in AbstractRenderHandler.OnPaintApplyTemplate();CreateOffscreenBrowser(new Size(400, 400));}
    }
    
  2. 动态添加和操作控件:

    CollapsableChromiumWebBrowser Browser = new CollapsableChromiumWebBrowser();
    //页面插入控件
    ctrlBrowerGrid.Children.Add(Browser);
    //这里不能用Load()的方法,会报错。
    Browser.Address = “www.baidu.com”;
    

获取Cookie和Html

  1. 添加Cookie访问类

    public class CookieVisitor : ICookieVisitor
    {public static string Cookies = null;public static string Html = null;public event Action<object> Action;public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie){if(count == 0)Cookies = null;Cookies += cookie.Name + "=" + cookie.Value + ";";deleteCookie = false;return true;}public void Dispose() {if (Action != null)Action((Html, Cookies));return;}
    }
    
  2. 添加Cookie和Html获取回调函数

    public async void RecieveCookie(object data)
    {(string html,string cookies) = ((string,string))data;return;
    }
    
  3. 浏览器控件访问网址,并设置回调

    async void LoadWebBrowser()
    {Browser.FrameLoadEnd += Browser_FrameLoadEnd;Browser.Address = "www.baidu.com";
    }private async void Browser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
    {CookieVisitor.Html = await Browser.GetSourceAsync();CookieVisitor visitor = new CookieVisitor();visitor.Action += RecieveCookie;Cef.GetGlobalCookieManager().VisitAllCookies(visitor);return;
    }
    

WPF下CefSharp的使用相关推荐

  1. Winform下CefSharp的引用、配置、实例与报错排除(源码)

    Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...

  2. cefsharp已停止工作_Winform下CefSharp的引用、配置、实例与报错排除(源码)

    Winform下CefSharp的引用.配置.实例与报错排除(源码) Winform 下 CefSharp 的引用, 配置, 实例与报错排除 [TOC] 1, 关于 CefSharp 装一手, 比较简 ...

  3. 【一】C# 基于WPF 使用CefSharp来做万能爬虫

    目录 [一]C# 基于WPF 使用CefSharp来做万能爬虫 [二]C# 基于WPF 使用CefSharp来做万能爬虫 [三]C# 基于WPF 使用CefSharp来做万能爬虫 [四]C# 基于WP ...

  4. WPF下字体模糊的问题

    WPF下字体模糊的问题 原文:WPF下字体模糊的问题 一直以来,发现WPF中的小字体下的文字变得比较模糊,比如: WPF与Winform字体显示比较: 为了看到更清楚,我们放大点显示: 放得更大些: ...

  5. WPF中CefSharp的使用(在WPF中使用快乐的使用chrome)

    Chromium Embedded Framework(Cef) 使用的是google chrome 内核 chromium 安装: PM> Install-Package CefSharp.W ...

  6. WPF下的视频录制界面设计

    原文:WPF下的视频录制界面设计 在去年12月份,我曾经写过三篇文章讨论C#下视频录制.播放界面的设计.这三篇文章是: 利用C#画视频录制及播放的界面(一) 利用C#画视频录制及播放的界面(二) 利用 ...

  7. C# 浅谈基于Wpf下的MVVM模式的设计思想

    目录 一.Model实体层 二.ViewModel视图模型层 1.定义属性通知基类 1.1 数据验证接口的实现 1.2 验证标识类定义 2.ViewModel前端交互实现 2.1 ICommand命令 ...

  8. WPF下聊天气泡的实现

    零.版本履历 日期 说明 2020.05.02 初稿 一.效果 先看最终效果. 最终微聊烂尾了,更确切地说,还没开始就结束了. 二.由来 产品虽然没有最终做出来,但至少聊天气泡打磨的还挺像样的. 说说 ...

  9. C# WPF使用CefSharp客户端内嵌浏览器做一个开小差工具

    前言 CefSharp是一个C#客户端内嵌入chromium开源项目浏览器的工具,方便在客户端中自然的访问网页内容,十分好用.当然,网上有很多使用CefSharp的教程了,怎么使用都很详尽.我这里只是 ...

  10. WPF 下TextBox 换行与 C#下TextBox换行

    有时候在WPF中要设置TEXTBOX自动换行 1.到文本框边缘后会自动换行 TextWrapping=Wrap 2.设置按Enter 健换行 AcceptsReturn=True 在C#下属性与WPF ...

最新文章

  1. centos7中输入ifconfig出现ens33,没有eth0
  2. [No0000D2]ClearCSharp编程清理脚本批处理bat
  3. 【问底】严澜:数据挖掘入门——分词
  4. CRNN:端到端不定长文字识别算法
  5. 关于ViewGroup中requestDisallowInterceptTouchEvent的用法
  6. 一个按键控制数码管的开和关_基于FPGA的数字电路实验3:点亮数码管
  7. hive复合数据类型之map
  8. 打造扛得住的MySQL数据库架构-第2章 什么影响了MySQL性能
  9. python中if的输入格式_Python基础之输出格式和If判断
  10. 西安python_西安找工作|西安人才网|西安全职招聘信息-西安58同城
  11. C++string的查找和替换
  12. 高级语言 和 低级语言 的区别
  13. 【C语言初阶】——简易版·扫雷(9*9)【运行逻辑思维导图+细节讲解+源码】【初级】
  14. 台湾ICPlus IP175GHI, 85nm /极低功率,5接口10/100以太网集成交换机芯片
  15. 【解决方案】Error response from daemon: Conflict. The container name /mongo is already in use by contain
  16. bootstrap手风琴_快速提示:如何自定义Bootstrap 4的手风琴组件
  17. 使用canvas对图片进行裁切
  18. FAQ:Nacos报错:server is DOWN now, please try again later!
  19. 十七、网上商城项目(5)
  20. php artisan dumpautoload,artisan 命令使用总结

热门文章

  1. 汇编语言典型例子详解_25个经典汇编程序案例
  2. 大数据时代,做数据分析报告的基本流程
  3. 数据挖掘RapidMiner工具使用----聚类K-Means案例分析
  4. ubuntu系统克隆实用教程
  5. Python3之日志模板
  6. elk logstach收集交换机日志
  7. iperf3的交叉编译
  8. android开发先学什么,Android开发入门教程应该先学什么
  9. 模块已加载,但找不到入口点DLLRegisterServer
  10. - 网页右下角广告(加强训练)题目描述模拟某些网站右下角的广告提示: