Files
KJD_WebService/TEMUKJD/ToolForms/CefForm.cs
T

197 lines
7.6 KiB
C#

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<Cookie> Cookies = new List<Cookie>();
public CefForm(string url = "", List<Cookie> 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<Cookie>();
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<List<string>>("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<string>() { 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('客服</span>');\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();
}
}
}
}