【一】C# 基于WPF 使用CefSharp来做万能爬虫
【二】C# 基于WPF 使用CefSharp来做万能爬虫
【三】C# 基于WPF 使用CefSharp来做万能爬虫
【四】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;
如下代码所示
///
/// 在自己窗口打开链接
///
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的方式和方法。