基于cefsharp的用户浏览器
技术:vc++2015
概述
用于需要制作一个浏览器 winfrom 中浏览器的插件有很多种 如:WebBrowser , Web.kit等 但用于比较稳定 功能齐全的还是cefsharp
详细
一、前言
使用cefSharp制作浏览器主要是一些页面无法通过自己的接口去控制,又不可能通过第三方去解决的时候,只能通过自己做的浏览器去分析界面,然后给出响应. 例如: xx的网页客服 目前具有各种缺陷无法发送文件 无法提醒客服新消息等
二、环境搭建
进入NuGet 管理程序包
添加 CefSharp.WinForms 和CefSharp.Common 使用v69.0.0版本
设置配置管理器 解决方案为 X86 cefSharp不予许 Any CPU
设置 引用程序.net4.5.2
三、程序实现
初始化cefSharp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /// <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; } |
分析数据
1 2 3 4 5 6 7 8 9 | /// <summary> /// 对话框中消息的数量 /// </summary> /// <param name="str"></param> /// <returns></returns> public static int getmsgCount( string str) { return Regex.Matches(str, @"message_content_inner" ).Count; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /// <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 "" ; } |
当把界面的信息获取到之后,就和接口获取数据后的操作一样了
设置定时器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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; } |
定时器方法 显示提示信息 提示用户
1 2 3 4 5 6 7 8 9 10 11 | private void Time_Tick( object sender, EventArgs e) { if ( this .WindowState == FormWindowState.Minimized) { showmsg(); } if (!act) { showmsg(); } } |
四、运行效果图
五、项目结构图
注意依赖部分太大,没在这里打包进来。
依赖:上述NuGet 管理程序包引用的 cefSharp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架