早已久仰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

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

  1. htaccess文件还可以被用来把访问网站的流量劫持到黑客的网站

    看是否有文件上传操作(POST方法), IPREMOVED--[01/Mar/2013:06:16:48-0600]"POST/uploads/monthly_10_2012/view.ph ...

  2. XP系统中IIS访问无法显示网页,目前访问网站的用户过多。终极解决办法

    无法显示网页 目前访问网站的用户过多. -------------------------------------------------------------------------------- ...

  3. 【前端】低版本IE浏览器访问网站一片空白

    最近在客户那里,发现一个奇葩的问题,系统上IE浏览器访问网站一片空白,显示无法访问. 但是相同的网站系统,在我们的电脑上又可以访问且IE浏览器版本相同,没法只有,装虚拟模拟客户环境复现一下了. 发现在 ...

  4. 为IIS服务器配置SSL,并设置为默认使用https协议访问网站

    要使网站支持https协议,需要SSL证书,我的服务器和域名都是在阿里云购买的,所以这里我演示阿里云获取SSL证书的方法 我先说下我的服务器环境:windows server 2012 + IIS8. ...

  5. Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站

    http://www.cnblogs.com/zhongweiv/archive/2013/01/07/https.html 配置环境 了解HTTPS 配置CA证书服务器 新建示例网站并发布在IIS ...

  6. 如何让你的网站支持https

    如何让你的网站支持https 当今世界的主流网站基本都是使用https对外界提供服务,甚至有某些公司建议完全使用https, 那么https是什么呢?请参考如下的图解,https是在我们通常说的tcp ...

  7. 配置Java SSL 访问网站证书

    最近在开发 Java 访问 Azure ServiceBus 时遇到SSL证书问题,导致JAVA报错,不能正常访问,报错信息如下: javax.net.ssl.SSLException: Connec ...

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

    iptables的conntrack表满了导致访问网站很慢 转载自:https://my.oschina.net/jean/blog/189935 检查系统conntrack表是否满 现象:突然发现访 ...

  9. js判断是手机还是电脑访问网站

    js判断是手机还是电脑访问网站                               <script type="text/javascript"> <!- ...

随机推荐

  1. TopShelf+Quartz.net 实现window服务

    Quartz.NET官网   TopShelf 网址 代码地址:https://github.com/SeaLee02/ProjectDemo/tree/master/WindowServerDemo ...

  2. .NET Core 之 Nancy 基本使用

    Nancy简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能 ...

  3. 页码0~N ,其中0,1....9都出现了几次

    /* 这道题目可以暴力解答:对1~n的每个数进行从低位到高位分析 一旦这个数字num出现,a[num]++即可 第二种方法: 由0,1,...9组成的所有n位数,从n个0到n个9共10^n个数,0,1 ...

  4. 【剑指offer】删除链表中重复的结点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针.例如,链表1->2->3->3->4->4->5 处理后为 ...

  5. 深度学习-DCGAN论文的理解笔记

    训练方法DCGAN 的训练方法跟GAN 是一样的,分为以下三步: (1)for k steps:训练D 让式子[logD(x) + log(1 - D(G(z)) (G keeps still)]的值 ...

  6. 05 Cookie.Session

    Cookie:在浏览器中保存用户的信息   使用:由服务器创建,发送到浏览器保存,之后随着请求发回到服务器 1.创建cookie Cookie cookie = new Cookie("na ...

  7. ubuntu supervisor管理uwsgi+nginx

    一.概述 superviosr是一个Linux/Unix系统上的进程监控工具,他/她upervisor是一个Python开发的通用的进程管理程序,可以管理和监控Linux上面的进程,能将一个普通的命令 ...

  8. Python 读取excel指定的列

    一.摘要 在这篇文章中: https://www.cnblogs.com/xiao987334176/p/9330368.html#autoid-4-5-2 介绍了使用 xlrd 模块,读取指定坐标的 ...

  9. LOJ#2409. 「THUPC 2017」小 L 的计算题 / Sum(生成函数)

    题意 给定一个长为 \(n\) 的序列 \(\{a_i\}\) 对于 \(k \in [1, n]\) 求 \[ f_k = \sum_{i = 1}^{n} a_i^k \pmod {9982443 ...

  10. PHP获取前台传过来的时间年份,进行处理。

    在做时间区间用到一个方法,以方便在数据库中用in()的使用,这个是我同事给我的,我先保存好,以后还可以的用到. /*处理起终年月,返回中间的月份以供数据库查询使用 * @param $yearl 起始 ...