【二】C# 基于WPF 使用CefSharp来做万能爬虫

【三】C# 基于WPF 使用CefSharp来做万能爬虫

【四】C# 基于WPF 使用CefSharp来做万能爬虫---扩展 一个httpClient访问辅助类可设置代理

分享一个对CefSharpWebrowser的操作类

using CefSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ChromeControler
    /// <summary>
    /// 对CefSharpWebBrowser的操作类
    /// </summary>
    public static class CefWebBrowserControl
        /// <summary>
        /// 获取html内容
        /// </summary>
        /// <param name="chromiumWebBrowser">CefSharp的webbrowser</param>
        /// <returns></returns>
        public static async Task<string> GetHtmlSource(CefSharp.Wpf.ChromiumWebBrowser chromiumWebBrowser)
            string htmlStr = string.Empty;
            await chromiumWebBrowser.GetSourceAsync().ContinueWith(taskHtml =>
                htmlStr = taskHtml.Result;
            return htmlStr;
        /// <summary>
        /// 给input赋值
        /// </summary>
        /// <param name="chromiumWebBrowser">CefSharp的webbrowser</param>
        /// <param name="id">根据id</param>
        public static string SetValueById(CefSharp.Wpf.ChromiumWebBrowser chromiumWebBrowser, string id,string value)
            if (id.Length > 0)
                string js = @"(
                            function()
                                var ele= document.getElementById('" + id + @"');
                                if(ele!=null)
                                    ele.value='"+value+@"';
                           )()";
                ExecuteJs(chromiumWebBrowser, js);
                return "赋值成功";
                return "id不能为空";
        /// <summary>
        /// 给Input赋值
        /// </summary>
        /// <param name="chromiumWebBrowser">CefSharp的webbrowser</param>
        /// <param name="name">根据控件的名称</param>
        /// <param name="innerHtml">内部html包含***</param>
        /// <param name="outHtml">外部html包含***</param>
        public static string SetValueByName(CefSharp.Wpf.ChromiumWebBrowser chromiumWebBrowser, string name,string value, SearchType searchType = SearchType.ControlName, string innerHtml = "", string outHtml = "")
            string js = string.Empty;
            string forStr = string.Empty;
            if (name.Length > 0)
                if (innerHtml.Length > 0)
                    forStr = "if(eleAug[i].innerText.indexOf('" + innerHtml + "') != -1) ";
                if (outHtml.Length > 0)
                    forStr = "if(eleAug[i].outerText.indexOf('" + outHtml + "') != -1) ";
                string searchjs = string.Empty;
                switch (searchType)
                    case SearchType.ControlName: { searchjs = " var eleAug= document.getElementsByName('" + name + @"');"; } break;
                    case SearchType.ClassName: { searchjs = " var eleAug= document.getElementsByClassName('" + name + @"');"; } break;
                    case SearchType.TagName: { searchjs = " var eleAug= document.getElementsByTagName('" + name + @"');"; } break;
                js = @"(
                            function()
                               " + searchjs + @"
                                if(eleAug!=null)
                                    for(var i=0;i< eleAug.length;i++)
                                        " + forStr + @"
                                            { ele.value='" + value + @"';}
                           )()";
                return "名称不能为空";
            ExecuteJs(chromiumWebBrowser, js);
            return "点击成功";
        /// <summary>
        /// 点击按钮
        /// </summary>
        /// <param name="chromiumWebBrowser">CefSharp的webbrowser</param>
        /// <param name="id">根据id</param>
        public static string ClickButtonById(CefSharp.Wpf.ChromiumWebBrowser chromiumWebBrowser, string id)
            if (id.Length > 0)
                string js = @"(
                            function()
                                var ele= document.getElementById('" + id + @"');
                                if(ele!=null)
                                    ele.click();
                           )()";
                ExecuteJs(chromiumWebBrowser, js);
                return "点击成功";
                return "id不能为空";
        /// <summary>
        /// 点击按钮
        /// </summary>
        /// <param name="chromiumWebBrowser">CefSharp的webbrowser</param>
        /// <param name="name">根据控件的名称</param>
        /// <param name="innerHtml">内部html包含***</param>
        /// <param name="outHtml">外部html包含***</param>
        public static string ClickButtonByName(CefSharp.Wpf.ChromiumWebBrowser chromiumWebBrowser,  string name, SearchType searchType = SearchType.ControlName, string innerHtml = "", string outHtml = "")
            string js = string.Empty;
            string forStr = string.Empty;
            if (name.Length > 0)
                if (innerHtml.Length > 0)
                    forStr = "if(eleAug[i].innerText.indexOf('" + innerHtml + "') != -1) ";
                if (outHtml.Length > 0)
                    forStr = "if(eleAug[i].outerText.indexOf('" + outHtml + "') != -1) ";
                string searchjs = string.Empty;
                switch (searchType)
                    case SearchType.ControlName: { searchjs = " var eleAug= document.getElementsByName('" + name + @"');"; } break;
                    case SearchType.ClassName: { searchjs = " var eleAug= document.getElementsByClassName('" + name + @"');"; } break;
                    case SearchType.TagName: { searchjs = " var eleAug= document.getElementsByTagName('" + name + @"');"; } break;
                js = @"(
                            function()
                               " + searchjs + @"
                                if(eleAug!=null)
                                    for(var i=0;i< eleAug.length;i++)
                                        " + forStr + @"
                                            { eleAug[i].click();}
                           )()";
                return "名称不能为空";
            ExecuteJs(chromiumWebBrowser, js);
            return "点击成功";
        /// <summary>
        /// 执行JS
        /// </summary>
        /// <param name="chromiumWebBrowser">wpf版本的ChromiumWebBrowser</param>
        /// <param name="js"></param>
        public static void ExecuteJs(CefSharp.Wpf.ChromiumWebBrowser chromiumWebBrowser, string js)
            var frame = chromiumWebBrowser.WebBrowser.GetMainFrame();
            frame.EvaluateScriptAsync(js);
    public enum SearchType
        ControlName,
        ClassName,
        TagName

使用示例:

  CefWebBrowserControl.SetValueById(chromiumWebBrowser, "kw", "万能爬虫");
  CefWebBrowserControl.ClickButtonById(chromiumWebBrowser, "su");
  CefWebBrowserControl.ClickButtonByName(chromiumWebBrowser, "n", SearchType.ClassName, "下一页>");

目录 【一】C# 基于WPF 使用CefSharp来做万能爬虫 【二】C# 基于WPF 使用CefSharp来做万能爬虫 【三】C# 基于WPF 使用CefSharp来做万能爬虫 【四】C# 基于WPF 使用CefSharp来做万能爬虫---扩展 一个httpClient访问辅助类可设置代理分享一个对CefSharpWebrowser的操作类... 1. 创建32位winform项目 必须指定32位或64位 这里使用32位 2. 下载CefSharp相关文件 3. 复制CefSharp相关文件到项目debug目录并添加引用 1.创建项目 关键步骤是项目必须是32位 2.CefSharp相关文件
1、开发场景 在使用winform自带的webbrowser控件时,要考虑IE的版本以及HTML5的渲染问题,使用体验十分糟糕。毕竟webbrowser只是IE浏览器的一个包装壳罢了。 因此,考虑使用chromium的开源版本,开发一个可以使用多种应用场景的浏览器控件。 经过几番周折,终于基于CefSharp完成了该控件的设计,并结合选项卡控件开发了一款“多选项卡浏览器”。 此浏览器的基本功能和使用体验,接近Chrome浏览器,可以内嵌使用,可以用来爬虫程序,可以与JavaScript交互进行自动化控制
1. 安装编译器: 在开始使用 C 语言之前, 需要安装一个 C 编译器, 常用的 C 编译器有 GCC, CLang 等. 2. 创建 C 程序文件: 使用文本编辑器创建一个新的文件, 并使用 .c 为文件名后缀. 3. 编写 C 代码: 在新创建的文件中, 输入 C 代码. C 代码包含函数和变量的声明, 以及执行操作的语句. 4. 编译 C 程序: 使用编译器将 C 程序编译成可执行文件. 5. 运行 C 程序: 在命令行中输入可执行文件的名称, 即可运行 C 程序. 例如, 下面是一个简单的 C 程序, 其中包含一个名为 "main" 的函数, 该函数在程序开始时被调用: #include <stdio.h> int main() { printf("Hello, World!\n"); return 0; 编译并运行这个程序的步骤如下: 1. 使用编译器编译程序: gcc hello.c -o hello 2. 运行可执行文件: ./hello Hello, World! 希望这些信息对您有帮助!