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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM