赞
踩
【四】C# 基于WPF 使用CefSharp来做万能爬虫---扩展 一个httpClient访问辅助类可设置代理
第一步:安装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;
如下代码所示
- /// <summary>
- /// 在自己窗口打开链接
- /// </summary>
- 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
代码如下:
- // <summary>
- /// 屏蔽浏览器右键菜单 cef菜单事件
- /// </summary>
- 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
代码如下:
- /// <summary>
- /// 下载文件
- /// </summary>
- 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的方式和方法。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。