197 lines
7.6 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|