using CefSharp; using CefSharp.WinForms; //using TemuKJD.DashBoardForms; using TemuKJD.Helper; using NaiBa.CefHelper; using NaiBa.CefHelper.Handler; using NaiBa.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; using TemuKJD.BaseForms; namespace TemuKJD.ToolForms { public partial class CefForm : LRBaseForm { ChromiumWebBrowser cefWebBrowser = null; string Url = ""; string PddBuyerCookie = ""; List Cookies = new List(); public CefForm(string url = "", List cookies = null) { InitializeComponent(); Url = url; if (cookies != null) Cookies = cookies; if (url.Contains("yangkeduo.com/goods.html")) { this.Height = 720; this.Width = 400; this.StartPosition = FormStartPosition.CenterScreen; } } private void CefForm_Load(object sender, EventArgs e) { this.StartPosition = FormStartPosition.CenterScreen; this.splitContainer1.Panel1Collapsed = true; if (string.IsNullOrEmpty(Url)) { Url = "about:blank"; this.TitleText = "空白页"; } else { var id = AllBase.BaseRegex.GetMatchRegexString(ref Url, "(\\d{5,30})"); if (!string.IsNullOrEmpty(id)) this.TitleText = id; else this.TitleText = Url; } if (cefWebBrowser == null) { cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false); var lifeHandler = new LifeSpanHandlerLocal(PopWindowType.NewTitleWindow); lifeHandler.OnPop += LifeHandler_OnPop; lifeHandler.parent = cefWebBrowser; cefWebBrowser.LifeSpanHandler = lifeHandler; cefWebBrowser.KeyboardHandler = new KeyboardHandler(); cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd; cefWebBrowser.Dock = DockStyle.Fill; this.splitContainer1.Panel2.Controls.Add(cefWebBrowser); } Task.Run(() => { while (cefWebBrowser.IsLoading) Thread.Sleep(50); var newCookieList = new List(); foreach (var cook in Cookies) { var t1 = CEFBrowser.SetCookieAsync(cook.Domain.Trim('.'), cook.Name + "=" + cook.Value + ";", cefWebBrowser.RequestContext.GetCookieManager(null)); t1.Wait(2500); } if (Url.Contains("yangkeduo.com/goods.html")) { Invoke(new Action(() => { this.splitContainer1.Panel1Collapsed = false; })); PddBuyerCookie = NaiBa.Util.Helper.ConfigHelper.LoadConfig>("chat_buyer_cookies")?.FirstOrDefault(); if (!string.IsNullOrEmpty(PddBuyerCookie)) { var cookieArr = PddBuyerCookie.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries); foreach (var cookie in cookieArr) { newCookieList.Add(new Cookie { Domain = "mobile.yangkeduo.com", Name = cookie.Split('=').FirstOrDefault(), Value = cookie.Split('=').LastOrDefault(), Expires = DateTime.Now.AddYears(1).AddHours(-8), Path = "/" }); } } } if (!string.IsNullOrEmpty(PddBuyerCookie)) { var t2 = CEFBrowser.SetCookieAsync("mobile.yangkeduo.com", PddBuyerCookie, cefWebBrowser.RequestContext.GetCookieManager(null)); t2.Wait(2500); } Thread.Sleep(500); cefWebBrowser.Load(Url); }); } bool isOpenKefu = false; private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) { if (e.Url.Contains("yangkeduo.com/goods.html")) { Task.Run(() => { var task = cefWebBrowser.GetBrowser().MainFrame.GetSourceAsync(); task.Wait(); if (task.Result?.Contains("login-box") == true) return; var cookies = CEFBrowser.GetCookie("yangkeduo.com", cefWebBrowser.RequestContext.GetCookieManager(null)); if (cookies != PddBuyerCookie) NaiBa.Util.Helper.ConfigHelper.SaveConfig("chat_buyer_cookies", new List() { cookies }); // 找到上家商品后自动跳转到客服聊天 if (!isOpenKefu) { isOpenKefu = true; var jsStrBase = "function clickProductAnalysis(txt) {\r\n" + "var child = document.body.firstElementChild;\r\n" + "var element1 = null;\r\n" + " while (child) {\r\n" + " if (child.innerHTML.indexOf(txt) >= 0) {\r\n" + " element1 = child;\r\n" + " if (child.firstElementChild) {\r\n" + " child = child.firstElementChild; continue;\r\n" + " } else break;\r\n" + " }\r\n" + " child = child.nextElementSibling;\r\n" + " }\r\n" + " if (element1) {\r\n" + " element1.click(); return 'success';\r\n" + " } else return 'no_element';\r\n" + "}\r\n"; var jsStr = jsStrBase + "clickProductAnalysis('客服');\r\n"; var t = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr); t.Wait(); } }); } } private void LifeHandler_OnPop(object sender, PopData e) { var targetUrl = e.Url; var lifeHandler = sender as LifeSpanHandlerLocal; Task.Run(() => { if (lifeHandler.parent != null) { var cookies = CEFBrowser.GetCookieList("", lifeHandler.parent.RequestContext.GetCookieManager(null)); Invoke(new Action(() => { CefForm cefForm = new CefForm(targetUrl, cookies); cefForm.Show(); })); } }); } private void btnChangeBuyer_Click(object sender, EventArgs e) { if (cefWebBrowser != null) { CEFBrowser.DeleteCookie(this.cefWebBrowser.RequestContext.GetCookieManager(default)); this.cefWebBrowser.Reload(); } } } }