cefsharp教程_常见的数据分析方法有哪些

cefsharp教程_常见的数据分析方法有哪些本节汇总一些关于cefsharp的使用方法,包括c#调用HTML页面中的js,也可以是HTML中的按钮调用c#的方法。汇总后,方便以后使用和查看。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

目录

1.取消右键功能

2.设置默认语言 

3.设置cookie

4.读取cookie

5.c#调用js

6.html调用c#

7. 模拟调用调试F12功能

8.关闭窗体

9.cefsharp中文文档参考


本节汇总一些关于cefsharp的使用方法,包括c#调用HTML页面中的js,也可以是HTML中的按钮调用c#的方法。汇总后,方便以后使用和查看。

1.取消右键功能

建立MenuHandler类,继承cef中的IContextMenuHandler,并且实现他的接口

 public class MenuHandler : IContextMenuHandler
    {

        void CefSharp.IContextMenuHandler.OnBeforeContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model)
        {
            model.Clear();
        }

        bool CefSharp.IContextMenuHandler.OnContextMenuCommand(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.CefMenuCommand commandId, CefSharp.CefEventFlags eventFlags)
        {
            //throw new NotImplementedException();
            return false;
        }

        void CefSharp.IContextMenuHandler.OnContextMenuDismissed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame)
        {
            //throw new NotImplementedException();
        }

        bool CefSharp.IContextMenuHandler.RunContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model, CefSharp.IRunContextMenuCallback callback)
        {
            return false;
        }
    }

使用的时候

chromeBrowser.MenuHandler = new MenuHandler();

2.设置默认语言 

CefSettings settings = new CefSettings();
settings.Locale = "zh-CN";// 设置语言
Cef.Initialize(settings, performDependencyCheck: true, browserProcessHandler: null);//以上这段代码一定要在new ChromiumWebBrowser之前调用

3.设置cookie

可以参考下面读取cookie

    var cookieManager = CefSharp.Cef.GetGlobalCookieManager();
            cookieManager.SetCookieAsync("http://localhost", new CefSharp.Cookie()
            {
                Domain = "localhost",           //这里是localhost,就会出现设置的值和HTML中的值
                Name = "1",
                Value = "2",
                Expires = DateTime.MinValue
            });

4.读取cookie

一般来说,cookie都是浏览器设置好了,所以,可以直接读取cookie。

一、使用js读取

1.HTML

<!DOCTYPE html>

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    this is page 111
    <br><a href="page4.html">to page4</a>
    <script language=javascript>

document.cookie="username=Tom&age=22";

    </script>
</body>
</html>

2.先把HTML发布成网站,代码如下

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace cef
{
    public partial class Form1 : Form
    {
        ChromiumWebBrowser webBrower = null;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //初始化配置
            string path = "http://localhost/1.html";
            webBrower = new ChromiumWebBrowser(path);
            webBrower.Dock = DockStyle.Fill;// 填充方式

            this.Controls.Add(webBrower);
        }
        private void button2_Click(object sender, EventArgs e)
        {
            Task<CefSharp.JavascriptResponse> t = webBrower.EvaluateScriptAsync("document.cookie");
            t.Wait();
            var cookie = t.Result.Result;
            MessageBox.Show(cookie.ToString());
        }
    }

}

二、使用cefsharp读取

1.load中载入

cefsharp教程_常见的数据分析方法有哪些 2.WebBrower_FrameLoadEnd事件

cefsharp教程_常见的数据分析方法有哪些 3.回调

cefsharp教程_常见的数据分析方法有哪些 4.建立Cookie读取对象,继承接口 ICookieVisitor

cefsharp教程_常见的数据分析方法有哪些

5.效果

cefsharp教程_常见的数据分析方法有哪些

 所有代码

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace cef
{
    public partial class Form1 : Form
    {
        ChromiumWebBrowser webBrower = null;
        string cookies;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //初始化配置
            string path = "http://localhost/1.html";
            webBrower = new ChromiumWebBrowser(path);
            webBrower.Dock = DockStyle.Fill;// 填充方式
            webBrower.FrameLoadEnd += WebBrower_FrameLoadEnd;
            this.Controls.Add(webBrower);
            //加载测试页面
            webBrower.Load("http://localhost/1.html");

            //模拟写入cookie(测试页面,也有一个cookie)
            var cookieManager = CefSharp.Cef.GetGlobalCookieManager();
            cookieManager.SetCookieAsync("http://localhost", new CefSharp.Cookie()
            {
                Domain = "localhost",           //这里是localhost,就会出现设置的值和HTML中的值
                Name = "1",
                Value = "2",
                Expires = DateTime.MinValue
            });
        }

        private void WebBrower_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
        {
            ICookieManager cookieManager = webBrower.GetCookieManager();
            CookieVisitor visitor = new CookieVisitor();
            visitor.SendCookie += visitor_SendCookie;
            cookieManager.VisitAllCookies(visitor);
        }
        private void visitor_SendCookie(CefSharp.Cookie obj)
        {
            cookies += obj.Domain.TrimStart('.') + "^" + obj.Name + "^" + obj.Value + "\r\n";
        }
        public class CookieVisitor : CefSharp.ICookieVisitor
        {
            public event Action<CefSharp.Cookie> SendCookie;

            public void Dispose()
            {

            }
            public bool Visit(CefSharp.Cookie cookie, int count, int total, ref bool deleteCookie)
            {
                deleteCookie = false;
                if (SendCookie != null)
                {
                    SendCookie(cookie);
                }

                return true;
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show(cookies.ToString());
        }
    }

}

三、加载完成后就显示

cefsharp教程_常见的数据分析方法有哪些 代码:

  public Action GetCookie;    
  private void Form1_Load(object sender, EventArgs e)
        { 

            GetCookie = () =>
            {
                Task<CefSharp.JavascriptResponse> t =                 
            webBrower.EvaluateScriptAsync("document.cookie");
                t.Wait();
                var cookie = t.Result.Result;

                this.button2.Text = cookie.ToString();
            };
        }
private void WebBrower_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
        {

          //写后面
            this.BeginInvoke(GetCookie);
        }

5.c#调用js

使用c#触发HTML中的js。

HTML代码:

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <p>点击按钮执行 <em>displayDate()</em> 函数.</p>
    <button id="myBtn">点这里</button>
    <p id="mytxt">213213</p>
    <script>
        document.getElementById("myBtn").onclick = function () { displayDate() };
        function displayDate() {
            document.getElementById("demo").innerHTML = Date();
        }
    </script>
    <p id="demo"></p>
</body>
</html>

效果是:

cefsharp教程_常见的数据分析方法有哪些

 c#中调用 

第一种方法

第一句是触发点击按钮事件。

第二句是触发文本修改。

            webBrower.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('myBtn').click();");
            webBrower.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('mytxt').innerHTML='123'");

效果

cefsharp教程_常见的数据分析方法有哪些

第二种方法

            var script = string.Format("document.getElementById('myBtn').click();");
            webBrower.GetMainFrame().ExecuteJavaScriptAsync(script);

6.html调用c#

 html代码

<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title>dd</title>
</head>
<body>
    <button onclick="AAA.aa()">html调用C#</button>
</body>
</html>

c#代码

using CefSharp;
using CefSharp.WinForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace cef
{
    public partial class Form1 : Form
    {
        private ChromiumWebBrowser chromeBrowser;
        public Form1()
        {
            InitializeComponent();
            InitializeChromium();
        }
        public void InitializeChromium()
        {
            string indexpage = AppDomain.CurrentDomain.BaseDirectory + @"\1.html";
            chromeBrowser = new ChromiumWebBrowser(indexpage);
            this.Controls.Add(chromeBrowser);
            chromeBrowser.Dock = DockStyle.Fill;
            CefSharpSettings.LegacyJavascriptBindingEnabled = true;
            CefSharpSettings.WcfEnabled = true;
            chromeBrowser.JavascriptObjectRepository.Register("AAA", new CefCustomObject(), isAsync: false, options: BindingOptions.DefaultBinder);
        }
    }
    public class CefCustomObject
    {
        public void aa()
        {
            MessageBox.Show("注意方法的命名,坑很多!!!");
        }
    }

}

 效果

cefsharp教程_常见的数据分析方法有哪些

注意: 这里调用的方法名称,aa(),之前我写show(),show好像是关键字,一直触发不了,非常的坑人!!!

7. 模拟调用调试F12功能

chromeBrowser.ShowDevTools();

8.关闭窗体

 try
            {
                _instanceBrowser.CloseDevTools();
                _instanceBrowser.GetBrowser().CloseBrowser(true);
            }
            catch { }

            try
            {
                if (_instanceBrowser != null)
                {
                    _instanceBrowser.Dispose();
                }
            }
            catch { }

            if (!_instanceMainForm.IsDisposed && _instanceMainForm.IsHandleCreated)
            {
                var result = _instanceMainForm.BeginInvoke(new Action(() =>
                {

                    if (_instanceMainForm != null && !_instanceMainForm.IsDisposed)
                    {
                        _instanceMainForm.Close();
                        _instanceMainForm.Dispose();
                    }
                }));
                _instanceMainForm.EndInvoke(result);
            }

9.cefsharp中文文档参考

这是GitHub上面的文档,其中有些不对,可能和版本有关系

CefSharp中文帮助文档 · cefsharp/CefSharp Wiki · GitHub

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193454.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spring bean别名注解_java.lang.clonable是类

    spring bean别名注解_java.lang.clonable是类前言在spring容器中,允许通过名称或别名来获取bean,这个能力来自于顶层接口AliasRegistry,分析类下属的关系图,可以看到,几乎所有主要容器都直接或间接的实现了Alias

    2022年8月17日
    5
  • CNN做时间序列预测_lstm时间序列预测_2「建议收藏」

    此数据是1949到1960一共12年,每年12个月的航班乘客数据,一共144个数据,单位是1000。我们使用它来进行LSTM时间序列预测的实验。数据如图所示第一列为时间第二列为数据编写代码头文件importnumpyimportmatplotlib.pyplotaspltfromkeras.modelsimportSequentialfromkeras….

    2022年4月8日
    175
  • 【OpenGrok代码搜索引擎】四、OpenGrok使用指南

    【OpenGrok代码搜索引擎】四、OpenGrok使用指南三、智能窗口四、差异跳转

    2022年4月30日
    146
  • autoconf 报错

    autoconf 报错报错现象:error:Autoconfversion2.64orhigherisrequired解决办法:查询当前版本:[python]viewplaincopy[root@wslu-cswslu]#rpm-qf/usr/bin/autoconfautoconf-2.63-5.1.el6.noarch卸载当前版本:[python]viewplainco…

    2022年5月9日
    40
  • 【WPF】Toolkit(一个项目)的要点总结

    【WPF】Toolkit(一个项目)的要点总结架构相关1.插件式开发:MEF具体怎么使用可参考百度+Demo(密码:k8ck)2.备份机制(项目特有功能)待续3.镜像机制(项目特有功能)待续4.分模块记录日志(转)非常完善的Log4net详细说明UI相关1.多语言读取系统的显示语言(displayLanguage),显示语言的定义是:假如你的系统现在是中文的,

    2022年10月2日
    2
  • ubuntu中文输入法_ubuntu如何设置中文输入法

    ubuntu中文输入法_ubuntu如何设置中文输入法在Ubtuntu12.10中自带了中文输入法,可通过Ctrl+Space进行输入法到切换,在英文系统中同样已经预装了ibus,只需要下载一下简体中文语言包即可。如何安装简体中文语言包?依次选择SytemSetting–>LanguageSupport–>Install/RemoveLanguages后,将出现如下图所示窗口:将右侧Installed栏的选择框勾…

    2022年9月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号