C#中CefSharp的简单使用

2 篇文章 0 订阅

2019/5/14更新 使用Nuget包引入的方式创建CefSharp项目



以下为原文

##准备工作##

1. 创建32位winform项目 必须指定32位或64位 这里使用32位
2. 下载CefSharp相关文件
3. 复制CefSharp相关文件到项目debug目录并添加引用


###1.创建项目###
关键步骤是项目必须是32位
这里写图片描述


###2.CefSharp相关文件###

可以直接通过NuGet程序包直接导入,本人为了图方便直接将用到的文件打包,新建项目时解压到debug目录就行

压缩包下载链接 密码:5n49

包内文件如下:
这里写图片描述
全都复制到Debug目录就行


###3.在项目中引用###
懒人方法:直接选中目录下所有dll文件添加:

不用管后面的错误提示

引用成功后实际引用的DLL如图:
这里写图片描述


###4.简单页面跳转###

  • 先画个界面
    这里写图片描述

-实现页面跳转功能
实现方式很简单

引用名空间

using System;
using System.Windows.Forms;
using CefSharp;
using CefSharp.WinForms;

声明变量

ChromiumWebBrowser CWebBrowser;

调用

        private void button1_Click(object sender, EventArgs e)
        {
            CWebBrowser = new ChromiumWebBrowser(textBox1.Text);
            panel1.Controls.Add(CWebBrowser);
        }

执行结果:
这里写图片描述

可以加载很多原生webbrowser不能加载的内容 可以适应iframe

其他相关操作

###5.获得页面源代码###
代码

       private void button2_Click(object sender, EventArgs e)
        {
            String html =  WebBrowser.GetSourceAsync().Result;
            richTextBox1.Text = html;
        }

*注意GetSourceAsync方法是异步操作 *

效果
这里写图片描述

###6.判断页面加载完成###

页面加载完成后会触发FrameLoadEnd事件

代码

        private void button1_Click(object sender, EventArgs e)
        {
            WebBrowser = new ChromiumWebBrowser(textBox1.Text);
            panel2.Controls.Add(WebBrowser);
            WebBrowser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(FrameEndFunc);

        }

        private void FrameEndFunc(object sender, FrameLoadEndEventArgs e)
        {
            MessageBox.Show("加载完毕");
            this.BeginInvoke(new Action(() => {
                String html = WebBrowser.GetSourceAsync().Result;
                richTextBox1.Text = html;
            }));
        }

注意使用WebBrowser.GetSourceAsync().Result会阻塞当前线程

运行效果
这里写图片描述

###6.执行页面中的js函数###

测试js代码

<html>
<body>
<button type="button" onclick="test(1,2)">测试按钮</button>
</body>
<script type="text/javascript">
function test(a,b)
{
var c = testfunc(a,b);
	alert(c);
}
function testfunc(a,b)
{
	return a+b;
}
</script>
<html>

测试功能:

调用页面中的testfunc函数

C# 代码

        private void button3_Click(object sender, EventArgs e)
        {
            WebBrowser.FrameLoadEnd += new EventHandler<FrameLoadEndEventArgs>(FrameEndFunc);
            using (StreamReader sr = new StreamReader("cefsharptext.html"))
            {
                string html = sr.ReadToEnd();
                WebBrowser.LoadHtml(html, "http://testpage/");
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            String script = "testfunc(99,1)";
            var result = this.WebBrowser.EvaluateScriptAsync(script).Result.Result;
            MessageBox.Show(result.ToString());
        }

执行效果:
这里写图片描述

##总结##

CefSharp是一个功能很强大的浏览器控件,本人从事爬虫相关工作,合理利用cefsharp便捷执行js代码的功能,可以绕过一些前端的加密混淆代码 代码比较简单就不上传了 有需要的朋友可以联系我


忘记放联系方式了
关注公众号回复"CefSharp"即获得项目下载地址(免费)
直接下载(5积分)
在这里插入图片描述

  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
CefSharp是一个基于Chromium Embedded Framework的.NET封装库,它允许开发者在.NET应用程序嵌入HTML5内容。如果你想要劫持CefSharp来实现一些自定义功能,可以尝试以下步骤: 1. 在你的C#项目安装CefSharp库,可以通过NuGet包管理器来完成。 2. 创建一个继承自CefSharp.WinForms.ChromiumWebBrowser的类,重写OnAfterCreated方法。 3. 在OnAfterCreated方法获取当前的Browser对象,并通过Browser对象的GetHost方法获取Host对象。 4. 在Host对象注册一个IRequestHandler实例,该实例可以拦截和处理浏览器请求。 5. 在IRequestHandler实例实现自定义的处理逻辑,例如修改请求参数、注入JavaScript代码等。 下面是一个简单的示例代码: ```csharp using CefSharp; using CefSharp.WinForms; class MyBrowser : ChromiumWebBrowser { protected override void OnAfterCreated(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser) { var host = browser.GetHost(); var requestHandler = new MyRequestHandler(); host.SetRequestHandler(requestHandler); } } class MyRequestHandler : IRequestHandler { bool IRequestHandler.OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect) { // 在这里可以修改请求参数 return false; } void IRequestHandler.OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) { // 在这里可以处理响应数据 } } ``` 需要注意的是,在实现自定义的IRequestHandler时,还可以覆盖其它方法来实现更丰富的功能,例如OnBeforeResourceLoad、OnResourceLoadComplete等方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值