使用CefSharp在C#访问网站,支持x86和x64

早已久仰CefSharp大名,今日才得以实践,我其实想用CefSharp来访问网站页面,然后抓取html源代码进行分析,如果使用自带的WebBrowser控件,可能会出现一些不兼容js的错误。

CefSharp允许您在.NET应用程序中嵌入Chromium。它是Marshall A. Greenblatt 围绕Chromium Embedded Framework(CEF)的轻量级.NET包装器。大约30%的绑定是用C ++ / CLI编写的,这里的大部分代码都是C#。它可以从C#或VB或任何其他CLR语言中使用。CefSharp提供WPF和WinForms Web浏览器控件实现。

GitHub地址:https://github.com/cefsharp/CefSharp

首先,我用vs新建一个winform的项目,环境如下:

  • .Net框架版本:4.6.2
  • Visual Studio 2013: 及以上,我这里使用的是vs2017版本

nuget命令如下:

  1. Install-Package CefSharp.WinForms -Version 71.0.2

复制代码

执行完成后,程序会自动添加依赖包,如下:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="cef.redist.x64" version="3.3578.1870" targetFramework="net462" />
  <package id="cef.redist.x86" version="3.3578.1870" targetFramework="net462" />
  <package id="CefSharp.Common" version="71.0.2" targetFramework="net462" />
  <package id="CefSharp.WinForms" version="71.0.2" targetFramework="net462" />
</packages>

安装完成后,编译项目报错如下:

CefSharp.Common contains unmanaged resoures, set your project and solution platform to x86 or x64. Alternatively for AnyCPU Support see https://github.com/cefsharp/CefSharp/issues/1714

看到网上的解决说:将活动解决方案平台改成 x86 (CEF不能自适应 x86 | x64,必须选择一个目标),目标平台也必须和解决方案平台一致。

从CefSharp 51开始,您可以使用AnyCPU使用CefSharp,但它不能单独工作,因为您需要在2个特定文件中进行一些更改。

按照网友的办法,应该是可以解决的,我没有试,其实cef已经支持AnyCPU了,但是需要配置,配置方案如下:

1:首先右击项目,卸载解决方案,编辑项目的.csproj文件,并在第一个 <PropertyGroup>的节点添加:

  1. <CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>

复制代码

<ignore_js_op>

QQ截图20190402195358.jpg (108.69 KB, 下载次数: 5)

下载附件

2019-4-2 20:21 上传

2:添加完成后,重新加载项目,并且在app.config添加如下配置:

  1. <runtime>
  2. <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  3. <probing privatePath="x86"/>
  4. </assemblyBinding>
  5. </runtime>

复制代码

<ignore_js_op>

QQ截图20190402202239.jpg (31.78 KB, 下载次数: 4)

下载附件

2019-4-2 20:22 上传

3:在Cef.Initialize调用前,配置浏览器启动路径,如下代码:

  1. var setting = new CefSettings();
  2. // 设置语言
  3. setting.Locale = "zh-CN";
  4. //cef设置userAgent
  5. setting.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";
  6. //配置浏览器路径
  7. setting.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";
  8. CefSharp.Cef.Initialize(setting, performDependencyCheck: true, browserProcessHandler: null);

复制代码

解决方案参考:https://github.com/cefsharp/CefSharp/issues/1714

完成的代码如下:

  1. using CefSharp;
  2. using CefSharp.WinForms;
  3. using System;
  4. using System.Windows.Forms;
  5. namespace DiscuzPost
  6. {
  7. public partial class Form1 : Form
  8. {
  9. public ChromiumWebBrowser chromeBrowser;
  10. public Form1()
  11. {
  12. InitializeComponent();
  13. }
  14. private void Form1_Load(object sender, EventArgs e)
  15. {
  16. var setting = new CefSettings();
  17. // 设置语言
  18. setting.Locale = "zh-CN";
  19. //cef设置userAgent
  20. setting.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";
  21. //配置浏览器路径
  22. setting.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";
  23. Cef.Initialize(setting, performDependencyCheck: true, browserProcessHandler: null);
  24. chromeBrowser = new ChromiumWebBrowser("https://www.itsvse.com");
  25. // Add it to the form and fill it to the form window.
  26. this.Controls.Add(chromeBrowser);
  27. chromeBrowser.Dock = DockStyle.Fill;
  28. }
  29. private void Form1_FormClosing(object sender, FormClosingEventArgs e)
  30. {
  31. Cef.Shutdown();
  32. }
  33. }
  34. }

复制代码

运行项目:

<ignore_js_op>

QQ截图20190402202614.jpg (263.95 KB, 下载次数: 4)

下载附件

2019-4-2 20:26 上传

参考资料:https://ourcodeworld.com/article ... informs-application

(完)

出处:https://www.itsvse.com/thread-7371-1-1.html

原文地址:https://www.cnblogs.com/mq0036/p/11059628.html

时间: 2024-12-11 12:47:01

使用CefSharp在C#访问网站,支持x86和x64的相关文章

老男孩教育每日一题-2017年3月22日:请说明用户访问网站流程

本题目也可以说为: 描述从浏览器打开http://www.oldboyedu.com地址回车发送请求到看到页面的过程? 打开浏览器输入网址回车,到看到页面的过程 大纲: 1.用户访问网站流程框架 2.DNS解析原理 ***** 3.tcp/ip三次握手原理 ***** 4.http协议原理(www服务的请求过程)请求报文细节! 5.大规模网站集群架构细节. 6.http协议原理(www服务的响应过程)响应报文细节! 7.tcp/ip四次挥手过程原理 ***** , 当我们打开浏览器输入网址回车,

iptables的conntrack表满了导致访问网站很慢

现象:突然发现访问网站很慢,服务器的cpu.内存和磁盘使用率都正常 分析过程及解决方案:查询/var/log/message日志发现有这样的记录“ip_conntrack table full dropping packet”.kernel 用 ip_conntrack 模块来记录 iptables 网络包的状态,并保存到 table 里(这个 table 在内存里),如果网络状况繁忙,比如高连接,高并发连接等会导致逐步占用这个 table 可用空间,一般这个 table 很大不容易占满并且可以

用户访问网站的完整流程

在浏览器输入想要访问的域名之后,浏览器会进行域名解析获得IP地址,在经过TCP的连接,实现数据的传输就会有两种报文,及请求报文和响应报文.最终才能实现通信.因此想要实现通信,就得先弄懂DNS的解析原理以及TCP连接通道的流程. 理论内容: 1.DNS的介绍以及原理 2.TCP/IP协议的介绍和三次握手及四次挥手 3.HTTP协议的介绍及请求与响应报文 4.用户访问浏览器的完整过程 1.DNS的介绍及解析原理 1)说说DNS是什么: DNS(Domain Name System,域名系统),因特网

IIS部署网站后, 无法正常访问网站问题

IIS部署网站后, 无法正常访问网站问题,并且提示503错误,而且对应的应用程序池自动停止 在系统日志中可以跟踪到错误信息 "应用程序池"Lee_Integration_web"将被自动禁用,原因是为此应用程序池提供服务的进程中出现一系列错误." "Windows Process Activation Service 未能为应用程序池"Lee_Integration_web"创建工作进程.数据字段包含错误号." 错误代码:80

用户访问网站的流程

请说明用户访问网站流程 2017-04-10 16:25:17 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lidao.blog.51cto.com/3388056/1914578 本题目也可以说为: 描述从浏览器打开http://www.oldboyedu.com地址回车发送请求到看到页面的过程? 打开浏览器输入网址回车,到看到页面的过程 大纲: 1.用户访问网站流程框架 2.DNS解析原理 ***** 3.tcp/ip

DNS解析原理(客户访问网站流程)

DNS( Domain Name System)是"域名系统"的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作.DNS就是这样的一位"翻译官",它的基本工作原理可用下图来表示.DNS域名称空间的组织方式: 基本流程:1.客户机通过浏览器访问网站:www.baidu.com此过程需要将域名映射为IP地址,首先调用解析函数将待转换的域名放在DNS请求中,以UDP的报文方式发给本地

Nginx禁止直接通过IP地址访问网站(关闭默认站点或空主机头)

这篇文章主要介绍了Nginx中禁止使用IP访问网站的配置实例,一般在备案时可能需要这种设置,需要的朋友可以参考下 国内因为备案的原因,所有服务器都要禁止使用IP访问网站.否则,如果允许使用IP访问网站,那随便解析一个域名到该IP,访问该域名就可以打开网站了.这是一个极大的风险!Nginx中可以很方便的来解决这个问题,小菜鸟来跟大家一起探讨一下. 如下的配置项,可以设置允许使用IP访问网站. server { listen 80; server_name ""; } 这里相当于是绑定了一

Spring:探测访问网站的设备类型

[该教程翻译自Spring官方,并进行适当删减.] 你将搭建的 创建一个Spring MVC项目,来探测访问网站的设备类型(手机.电脑.平板),并动态切换呈现的视图. 工具 一个文本编辑器,JDK1.6及以上,Maven 3.0+或者Gradle 1.11+.(本文将使用Maven) pom.xml清单: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven

网站运营成功四要素你知道不?(从客户访问网站角度)

一个网站要运营成功的几个要素(从客户访问网站的角度) 我们可以模拟客户游历网站的过程,一个客户在网上游历,偶然中通过搜索引擎或是网络广告,或其其他的方式找到了你的网站: 1.Arrived到达:要让客户找到你认识你,这就要通过网络广告,其他广告形式去宣传,但是宣传是个很花钱的事,如果又想不花太多的钱,又想有好的效果,那就是进行seo.所以seo是前台技术,是一种如何让客户快速找到你的一种技术.seo不是作弊,seo是网站运营的基础性工作. 2.Accept接受:要让客户接受你,一个网站要让客户接