CefSharp 开发的浏览器ChromiumWebBrowser,选项卡方式,页面中有form提交的数据时不能获取到?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CefSharp 开发的浏览器ChromiumWebBrowser,选项卡方式,页面中有form提交的数据时不能获取到?相关的知识,希望对你有一定的参考价值。
通过ILifeSpanHandler进行拦截,但不知道怎么获取页面中的form提交的数据,前提是在页面中点击连接,此连接调用js进行form提交能解决问题金币不是问题
参考技术A 哦基于cefsharp的用户浏览器
概述
详细
一、前言
使用cefSharp制作浏览器主要是一些页面无法通过自己的接口去控制,又不可能通过第三方去解决的时候,只能通过自己做的浏览器去分析界面,然后给出响应. 例如: xx的网页客服 目前具有各种缺陷无法发送文件 无法提醒客服新消息等
二、环境搭建
进入NuGet 管理程序包
添加 CefSharp.WinForms 和CefSharp.Common 使用v69.0.0版本
设置配置管理器 解决方案为 X86 cefSharp不予许 Any CPU
设置 引用程序.net4.5.2
三、程序实现
初始化cefSharp
public void init() { CefSettings _settings = new CefSettings(); //禁止GPU(图形处理器) 加速 _settings.CefCommandLineArgs.Add("disable-gpu", "1"); // Enable WebRTC 支持媒体流 _settings.CefCommandLineArgs.Add("enable-media-stream", "1"); //不要使用代理服务器,总是直接连接。覆盖传递的任何其他代理服务器标志。 //略微改进了Cef初始化时间,因为它不会尝试解析代理 _settings.CefCommandLineArgs.Add("no-proxy-server", "1"); _settings.Locale = "zh-CN"; //浏览器引擎的语言 _settings.AcceptLanguageList = "zh-CN,zh;q=0.8"; //日志文件 _settings.PersistSessionCookies = true;//保存回话 Cef.Initialize(_settings); webBrowser = new ChromiumWebBrowser("https://www.baidu.com/"); this.panel1.Controls.Add(webBrowser); webBrowser.Dock = DockStyle.Fill; }
获取网页html
/// <summary> /// 获取网页html /// </summary> /// <param name="webBrowser"></param> /// <returns></returns> public static string gethtml(ChromiumWebBrowser webBrowser) { string str = ""; if (webBrowser.IsBrowserInitialized) { var task = webBrowser.GetSourceAsync(); task.Wait(); str = task.Result; } return str; }
分析数据
/// <summary> /// 对话框中消息的数量 /// </summary> /// <param name="str"></param> /// <returns></returns> public static int getmsgCount(string str) { return Regex.Matches(str, @"message_content_inner").Count; }
/// <summary> /// 获取选择的用户昵称 /// </summary> /// <returns></returns> public static string getSelectedNick(string str) { int selectedindex = str.IndexOf("card_selected"); // loglw.PrintLog("",str); if (selectedindex > 0) { string selects = str.Substring(selectedindex, 500); int altindex = selects.IndexOf("alt="); int overindex = selects.IndexOf(""", altindex + 5); return selects.Substring(altindex + 5, overindex - altindex - 5); } return ""; }
当把界面的信息获取到之后,就和接口获取数据后的操作一样了
设置定时器
Timer time; public Form1() { InitializeComponent(); this.Load += Form1_Load; this.Shown += Form1_Shown; this.Activated += Form1_Activated; this.Deactivate += Form1_Deactivate; time = new Timer(); time.Interval = 2000; time.Tick += Time_Tick; new ToolTip().SetToolTip(file, "客户文件盒"); this.FormClosing += Form1_FormClosing; }
定时器方法 显示提示信息 提示用户
private void Time_Tick(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Minimized) { showmsg(); } if (!act) { showmsg(); } }
四、运行效果图
五、项目结构图
注意依赖部分太大,没在这里打包进来。
依赖:上述NuGet 管理程序包引用的 cefSharp