From 91a420730eb004704770df1200f1747fa96fad52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=C2=B7=C3=A6?= <279202647@qq.com> Date: Thu, 28 Oct 2021 20:55:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0ajaxhook?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserControls/BrowerControl.xaml.cs | 146 ++++++++++++------ .../UserControls/CatControl.xaml.cs | 2 +- .../UserControls/ItemControl.xaml.cs | 2 +- .../cefhelper/CefRequestHandler.cs | 43 ++++++ .../cefhelper/ExtChromiumBrowser.cs | 1 + .../齐越慧眼/齐越慧眼.csproj | 2 +- 6 files changed, 143 insertions(+), 53 deletions(-) create mode 100644 客户端/齐越慧眼/齐越慧眼/cefhelper/CefRequestHandler.cs diff --git a/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs b/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs index a883a9a..0b11f83 100644 --- a/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs +++ b/客户端/齐越慧眼/齐越慧眼/UserControls/BrowerControl.xaml.cs @@ -18,33 +18,49 @@ namespace 齐越慧眼.UserControls { public static BrowerControl Main = null; - public ExtChromiumBrowser web; + static MyRequestHandler myRequest; + public ChromiumWebBrowser web; public BrowerControl() { InitializeComponent(); - - web = new ExtChromiumBrowser("https://www.taobao.com") + myRequest = new MyRequestHandler() { brower=this}; + web = new ChromiumWebBrowser("https://www.taobao.com") { BrowserSettings = { - DefaultEncoding = "UTF-8", - Plugins= CefState.Enabled, - //关于跨域限制 - WebSecurity = CefState.Disabled, - ApplicationCache=CefState.Enabled, - LocalStorage= CefState.Enabled - - } + DefaultEncoding = "UTF-8", + Plugins = CefState.Enabled, + //关于跨域限制 + //WebSecurity = CefState.Disabled, + ApplicationCache = CefState.Enabled, + LocalStorage = CefState.Enabled + + }, + // RequestHandler = myRequest }; + + grid.Children.Add(web); Loaded += BrowerControl_Loaded; - web.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true; web.JavascriptObjectRepository.Register("hyCoreModel", new CefAsyncJS(), BindingOptions.DefaultBinder); Main = this; - web.StartNewWindow += Web_StartNewWindow; + // web.StartNewWindow += Web_StartNewWindow; + + } + + public void OnUrlEnd(string url) + { + if (url.Contains("search.jd.com/s_new.php")) + { + Task.Factory.StartNew(() => + { + lastUrl = url; + DoWork(); + }); + } } private void Web_StartNewWindow(object sender, NewWindowEventArgs e) @@ -102,53 +118,69 @@ namespace 齐越慧眼.UserControls { lock (doWorkObj) { - AddJquery(); + if (string.IsNullOrEmpty(lastUrl)) + return; - while (true) + if (!lastUrl.Contains("jd.com")) { - Task task = null; - - Application.Current.Dispatcher.Invoke(() => - { - task = web.EvaluateScriptAsPromiseAsync("return $(document.body).html();"); - }); + AddJquery(); + } - var result = task.Result; + AddAjaxHook(); - //判断是否加载完成 - if (result.Success) - { - AddCss(); - - if (lastUrl.Contains("s.taobao.com")) - { - AddTaoBaoOptionDiv(); - CheckTaoBaoPageItem(); - } - - if (lastUrl.Contains("search.jd.com")) - { - AddJDOptionDiv(); - CheckJDPageItem(); - } - - if (lastUrl.Contains("s.1688.com")) - { - Add1688OptionDiv(); - Check1688PageItem(); - web.ShowDevTools(); - } - - lastUrl = string.Empty; - break; - } - } + DoWork(); } }); t.Start(); } + + private void DoWork() + { + while (true) + { + Task task = null; + + Application.Current.Dispatcher.Invoke(() => + { + task = web.EvaluateScriptAsPromiseAsync("return $(document.body).html();"); + }); + + var result = task.Result; + + //判断是否加载完成 + if (result.Success) + { + AddCss(); + + if (lastUrl.Contains("s.taobao.com")) + { + AddTaoBaoOptionDiv(); + CheckTaoBaoPageItem(); + } + + if (lastUrl.Contains("search.jd.com")) + { + AddJDOptionDiv(); + CheckJDPageItem(); + } + + //if (lastUrl.Contains("s.1688.com")) + //{ + // Add1688OptionDiv(); + // Check1688PageItem(); + // web.ShowDevTools(); + //} + + lastUrl = string.Empty; + break; + } + + Thread.Sleep(100); + } + } + /// /// 添加jq操作类 /// @@ -251,6 +283,14 @@ namespace 齐越慧眼.UserControls } #endregion + /// + /// 添加ajax请求拦截 + /// + /// + private bool AddAjaxHook() + { + return DoJavaScript(@"$(document).ajaxSuccess(function( event, xhr, settings ) {onAjaxHook(settings.url);});").isOk; + } //object_id@653756566953^ #region 京东代码 @@ -668,6 +708,12 @@ namespace 齐越慧眼.UserControls { return ""; } + + public void onAjaxHook(string url) + { + MainWindow.Main.brower.OnUrlEnd(url); + } + public bool settaobaoItemData(dynamic data) { if (!MainWindow.Main.IsUpdateKey) diff --git a/客户端/齐越慧眼/齐越慧眼/UserControls/CatControl.xaml.cs b/客户端/齐越慧眼/齐越慧眼/UserControls/CatControl.xaml.cs index e6404a7..6f9208d 100644 --- a/客户端/齐越慧眼/齐越慧眼/UserControls/CatControl.xaml.cs +++ b/客户端/齐越慧眼/齐越慧眼/UserControls/CatControl.xaml.cs @@ -32,7 +32,7 @@ namespace 齐越慧眼.UserControls DefaultEncoding = "UTF-8", Plugins= CefState.Enabled, //关于跨域限制 - WebSecurity = CefState.Disabled, + //WebSecurity = CefState.Disabled, }, }; diff --git a/客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs b/客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs index ccf742a..ffc63d7 100644 --- a/客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs +++ b/客户端/齐越慧眼/齐越慧眼/UserControls/ItemControl.xaml.cs @@ -31,7 +31,7 @@ namespace 齐越慧眼.UserControls DefaultEncoding = "UTF-8", Plugins= CefState.Enabled, //关于跨域限制 - WebSecurity = CefState.Disabled + //WebSecurity = CefState.Disabled }, }; diff --git a/客户端/齐越慧眼/齐越慧眼/cefhelper/CefRequestHandler.cs b/客户端/齐越慧眼/齐越慧眼/cefhelper/CefRequestHandler.cs new file mode 100644 index 0000000..99bef6b --- /dev/null +++ b/客户端/齐越慧眼/齐越慧眼/cefhelper/CefRequestHandler.cs @@ -0,0 +1,43 @@ +using CefSharp; +using CefSharp.Handler; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Windows; +using 齐越慧眼.UserControls; + +namespace 齐越慧眼.cefhelper +{ + + public class MyRequestHandler : RequestHandler + { + public BrowerControl brower { get; set; } + + protected override bool OnBeforeBrowse(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool userGesture, + bool isRedirect) + { + // 先调用基类的实现,断点调试 + return base.OnBeforeBrowse(chromiumWebBrowser, browser, frame, request, userGesture, isRedirect); + } + + protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, + IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling) + { + + if (!string.IsNullOrEmpty(request.Url)) + { + if (request.Url.Contains("jd.com")) { + brower.OnUrlEnd(request.Url); + } + } + // 先调用基类的实现,断点调试 + return base.GetResourceRequestHandler( + chromiumWebBrowser, browser, frame, request, isNavigation, + isDownload, requestInitiator, ref disableDefaultHandling); + } + + } +} diff --git a/客户端/齐越慧眼/齐越慧眼/cefhelper/ExtChromiumBrowser.cs b/客户端/齐越慧眼/齐越慧眼/cefhelper/ExtChromiumBrowser.cs index 86285f1..0d563e1 100644 --- a/客户端/齐越慧眼/齐越慧眼/cefhelper/ExtChromiumBrowser.cs +++ b/客户端/齐越慧眼/齐越慧眼/cefhelper/ExtChromiumBrowser.cs @@ -12,6 +12,7 @@ namespace 齐越慧眼.cefhelper : base(null) { this.LifeSpanHandler = new CefLifeSpanHandler(); + //this.DownloadHandler = new DownloadHandler(this); } diff --git a/客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj b/客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj index c035dd9..84a7e68 100644 --- a/客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj +++ b/客户端/齐越慧眼/齐越慧眼/齐越慧眼.csproj @@ -61,7 +61,7 @@ - +