• CefSharp 浏览器核心,爬虫


    CefSharp是什么

    1. A framework for embedding web-browsing-like capabilities to a standard .NET application (WPF or Windows Forms).
    2.  A set of high-level custom controls to make it reasonably easy to integrate these capabilities in your application.
    3.  Built on top of CEF, the Chromium Embedded Framework by Marshall A. Greenblatt.
    4.  CefSharp does little more than package CEF in a nice convenient .Net Wrapper.
    5. 以上是原文,其实就是一个浏览器核心,类似WebKit东西,然后可以嵌入程序中,方便咱们开发使用了

    为什么用CefSharp

    1.  CefSharp加载完成后,获取的是加载完成后的网页源代码,相当于google浏览器F12看到的源代码哦
    2.  这样,就不用分析对方浏览器如何加密的,获取到的数据,直接就是用户看到的最终数据

     如何安装

    1. .net程序 右键---管理Nuget应用程序包--搜索CefSharp---安装
    2. 程序最低依赖是.net4.5.2
    3. 必须使用x86或者x64编译环境

     初始化并使用

    static ChromiumWebBrowser browser;
     
    var settines = new CefSettings()
    {
        Locale = "zh-CN",
        AcceptLanguageList = "zh-CN",
        MultiThreadedMessageLoop = true
    };
     
    Cef.Initialize(settines);
    browser = new ChromiumWebBrowser("www.baidu.com");//指定初始化地址
    this.panel1.Controls.Add(browser);
    browser.Dock = DockStyle.Fill;
     
    //加载开始事件
    browser.FrameLoadStart += Browser_FrameLoadStart;
     
    //加载完成后事件
    browser.FrameLoadEnd += Web_FrameLoadEnd;

    跳转到指定地址

      browser.Load("www.qq.com");

    加载完成事件

    private async void Web_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
    {
        //一个网页会调用多次,需要手动自己处理逻辑
        var url = e.Url;
        var result = await browser.GetSourceAsync();
        var html = result;
    }

    调用JS

    browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("alert('这是c#调用的js,给文本框赋值!')");
     
     browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('kw').value='在C#里面给页面文本框进行赋值'");
     
    //你可以做你任何想做的事了

    全部源代码

    namespace WindowsFormsApp2
    {
        public partial class Form1 : Form
        {
            static ChromiumWebBrowser browser;
            public Form1()
            {
                InitializeComponent();
                DataInit();
            }
    
            /// <summary>
            /// 初始化
            /// </summary>
            public void DataInit()
            {
                var settines = new CefSettings()
                {
                    Locale = "zh-CN",
                    AcceptLanguageList = "zh-CN",
                    MultiThreadedMessageLoop = true
                };
    
                Cef.Initialize(settines);
                browser = new ChromiumWebBrowser("www.baidu.com");//指定初始化地址
                this.panel1.Controls.Add(browser);
                browser.Dock = DockStyle.Fill;
    
                //加载开始事件
                browser.FrameLoadStart += Browser_FrameLoadStart;
    
                //加载完成后事件
                browser.FrameLoadEnd += Web_FrameLoadEnd;
            }
    
            private void Browser_FrameLoadStart(object sender, FrameLoadStartEventArgs e)
            {
                var url = e.Url;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                browser.Load(txt_Url.Text);
            }
    
            private async void Web_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
            {
                //一个网页会调用多次,需要手动自己处理逻辑
                var url = e.Url;
                var result = await browser.GetSourceAsync();
                var html = result;
    
                ////调用js
                //browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("alert('这是c#调用的js,给文本框赋值!')");
                ////txtAccount
                //browser.GetBrowser().MainFrame.ExecuteJavaScriptAsync("document.getElementById('kw').value='在C#里面给页面文本框进行赋值'");
            }
        }
    }
  • 相关阅读:
    HTML元素 绑定href属性
    form提交不刷新,不跳转页面
    使用MVCPager做AJAX分页所需要注意的地方
    docker基础命令,常用操作
    docker基础
    redis持久化 RDB与AOF
    redis哨兵功能
    redis主从同步
    redis不重启,切换到RDB备份到AOF备份
    redis-cluster(集群)
  • 原文地址:https://www.cnblogs.com/shuyu/p/9389285.html
Copyright © 2020-2023  润新知