使用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>

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>

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>
参考资料:https://ourcodeworld.com/article ... informs-application

(完)



 

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

posted on   jack_Meng  阅读(9788)  评论(0编辑  收藏  举报

编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2017-06-20 jQuery火箭图标返回顶部代码

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示

喜欢请打赏

扫描二维码打赏

支付宝打赏

主题色彩