zoukankan      html  css  js  c++  java
  • 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#里面给页面文本框进行赋值'");
            }
        }
    }
  • 相关阅读:
    以查询功能谈下,三层架构中的工厂模式与其中反射的应用
    结对编程
    第四周周结
    知识思考
    自我介绍
    本周开发工作及内容
    第三周周结
    启航
    如何写出健壮的Java代码
    CentOS x64上Matlab R2015b的镜像安装方法与卸载
  • 原文地址:https://www.cnblogs.com/shuyu/p/9389285.html
Copyright © 2011-2022 走看看