使用CefSharp在C#访问网站,支持x86和x64
Posted mq0036
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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命令如下:
- 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>
安装完成后,编译项目报错如下:
看到网上的解决说:将活动解决方案平台改成 x86 (CEF不能自适应 x86 | x64,必须选择一个目标),目标平台也必须和解决方案平台一致。
从CefSharp 51开始,您可以使用AnyCPU使用CefSharp,但它不能单独工作,因为您需要在2个特定文件中进行一些更改。
按照网友的办法,应该是可以解决的,我没有试,其实cef已经支持AnyCPU了,但是需要配置,配置方案如下:
1:首先右击项目,卸载解决方案,编辑项目的.csproj文件,并在第一个 <PropertyGroup>的节点添加:
- <CefSharpAnyCpuSupport>true</CefSharpAnyCpuSupport>
复制代码
<ignore_js_op>
2:添加完成后,重新加载项目,并且在app.config添加如下配置:
- <runtime>
- <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
- <probing privatePath="x86"/>
- </assemblyBinding>
- </runtime>
复制代码
<ignore_js_op>
3:在Cef.Initialize调用前,配置浏览器启动路径,如下代码:
- var setting = new CefSettings();
- // 设置语言
- setting.Locale = "zh-CN";
- //cef设置userAgent
- setting.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";
- //配置浏览器路径
- setting.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";
- CefSharp.Cef.Initialize(setting, performDependencyCheck: true, browserProcessHandler: null);
复制代码
解决方案参考:https://github.com/cefsharp/CefSharp/issues/1714
完成的代码如下:
- using CefSharp;
- using CefSharp.WinForms;
- using System;
- using System.Windows.Forms;
- namespace DiscuzPost
- public partial class Form1 : Form
-
- public ChromiumWebBrowser chromeBrowser;
- public Form1()
-
- InitializeComponent();
-
- private void Form1_Load(object sender, EventArgs e)
-
- var setting = new CefSettings();
- // 设置语言
- setting.Locale = "zh-CN";
- //cef设置userAgent
- setting.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";
- //配置浏览器路径
- setting.BrowserSubprocessPath = @"x86\CefSharp.BrowserSubprocess.exe";
- Cef.Initialize(setting, performDependencyCheck: true, browserProcessHandler: null);
- chromeBrowser = new ChromiumWebBrowser("https://www.itsvse.com");
- // Add it to the form and fill it to the form window.
- this.Controls.Add(chromeBrowser);
- chromeBrowser.Dock = DockStyle.Fill;
-
- private void Form1_FormClosing(object sender, FormClosingEventArgs e)
-
- Cef.Shutdown();
-
-
复制代码
运行项目:
<ignore_js_op>
参考资料:https://ourcodeworld.com/article ... informs-application
(完)
|
出处:https://www.itsvse.com/thread-7371-1-1.html
以上是关于使用CefSharp在C#访问网站,支持x86和x64的主要内容,如果未能解决你的问题,请参考以下文章
[CefSharp] 如何在JavaScript中调用C#代码
C# CefSharp如何在Winforms应用程序中使用
无法为 x64 和 x86 加载文件或程序集 'CefSharp.Wpf;只有一个作品
cefsharp
WinForm窗体程序中使用CefSharp获取加载后的资源截取request参数拦截response数据注入jquery文件和js代码-使用CefSharp
wpf中js调用C#后台方法,使用框架CefSharp