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

目录

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

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

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

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

 

安装CefSharp,并开始使用

第一步:安装CefSharp

在NuGet里搜索 CefSharp.Wpf 并安装

第二步:使用CefSharp


 

  CefSharp.Wpf.ChromiumWebBrowser chromiumWebBrowser = new CefSharp.Wpf.ChromiumWebBrowser();
        public MainWindow()
        {
            InitializeComponent();
            //var handle = new CefChromeHandle();
            //chromiumWebBrowser.RequestHandler = new CefChromeHandle();
           
            rongqi.Children.Add(chromiumWebBrowser);
            
        }

第三步:载入页面

     chromiumWebBrowser.Load("https://www.baidu.com/");

     注:该方法只能在wpf页面渲染出来之后才能执行。

第四步:配置页内只能在本窗体进行载入,不开新弹窗

 1.添加实现类继承 CefSharp.ILifeSpanHandler 该CefSharp提供的接口

    添加using

    using CefSharp;
    using CefSharp.Wpf;  

    如下代码所示


    /// 
    /// 在自己窗口打开链接
    /// 
    internal class OpenPageSelf : ILifeSpanHandler
    {
        public bool DoClose(IWebBrowser browserControl, IBrowser browser)
        {
            return false;
        }

        public void OnAfterCreated(IWebBrowser browserControl, IBrowser browser)
        {

        }

        public void OnBeforeClose(IWebBrowser browserControl, IBrowser browser)
        {

        }

        public bool OnBeforePopup(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl,
string targetFrameName, WindowOpenDisposition targetDisposition, bool userGesture, IPopupFeatures popupFeatures,
IWindowInfo windowInfo, IBrowserSettings browserSettings, ref bool noJavascriptAccess, out IWebBrowser newBrowser)
        {
            newBrowser = null;
            var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
            chromiumWebBrowser.Load(targetUrl);
            return true; //Return true to cancel the popup creation copyright by codebye.com.
        }
    }

2.在使用webbrowser前设置如下

   chromiumWebBrowser.LifeSpanHandler = new OpenPageSelf();

 

第五步:屏蔽webbrowser鼠标右键菜单

1.添加MenuHandler类实现接口 CefSharp.IContextMenuHandler

  代码如下:


    // 
    /// 屏蔽浏览器右键菜单 cef菜单事件
    /// 
    public class MenuHandler : CefSharp.IContextMenuHandler
    {

        void CefSharp.IContextMenuHandler.OnBeforeContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model)
        { 
            model.Clear();
        }

        bool CefSharp.IContextMenuHandler.OnContextMenuCommand(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.CefMenuCommand commandId, CefSharp.CefEventFlags eventFlags)
        {
            //throw new NotImplementedException();
            return false;
        }

        void CefSharp.IContextMenuHandler.OnContextMenuDismissed(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame)
        {

            //throw new NotImplementedException();
        }

        bool CefSharp.IContextMenuHandler.RunContextMenu(CefSharp.IWebBrowser browserControl, CefSharp.IBrowser browser, CefSharp.IFrame frame, CefSharp.IContextMenuParams parameters, CefSharp.IMenuModel model, CefSharp.IRunContextMenuCallback callback)
        {
            return false;
        }

    }

2.同上,在使用webbrowser前设置下

   chromiumWebBrowser.MenuHandler = new MenuHandler();

第六步 设置下载文件的方法转移

1.新建类DownloadHandler实现 CefSharp.IDownloadHandler

  代码如下:

    /// 
    /// 下载文件
    /// 
    public class DownloadHandler : IDownloadHandler
    {
        public void OnBeforeDownload(IWebBrowser chromiumWebBrowser, IBrowser browser, DownloadItem downloadItem, IBeforeDownloadCallback callback)
        {
            //这里自己写自己下载文件的方式,downloadItem.Url是下载文件的地址,这里是采用ie的下载方式
            WebBrowser ie = new WebBrowser();
            ie.Navigate(downloadItem.Url);
            browser.CloseBrowser(false);
        }

        public void OnDownloadUpdated(IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
        {
            downloadItem.IsCancelled = true;
        }

        public bool OnDownloadUpdated(CefSharp.DownloadItem downloadItem)
        {
            return false;
        }

        public void OnDownloadUpdated(IWebBrowser chromiumWebBrowser, IBrowser browser, DownloadItem downloadItem, IDownloadItemCallback callback)
        {
            throw new NotImplementedException();
        }
    }

2.在使用webbrowser前设置一下

   chromiumWebBrowser.DownloadHandler = new DownloadHandler();

 

到这里爬虫的前奏和基本设置都已经可以了。接下来就主要来开始实现操作页面的一些动作,以及获取和设置CefSharp的Webbrowser内的cookie的方式和方法。

你可能感兴趣的:(WPF,CefSharp)