Files
KJD_WebService/TEMUKJD/TaobaoLoginForm.cs
T
2025-07-09 10:09:32 +08:00

345 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using AllBase;
using DevComponents.DotNetBar;
using Work.Api;
using Work.CollectClass;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using CefSharp;
using CefSharp.WinForms;
using Work;
using TemuKJD.KJDForms.BaseForms;
using NaiBa.CefHelper;
namespace TemuKJD
{
public partial class TaobaoLoginForm : LRBaseForm
{
string Cef1Html = "";
public static TaobaoLoginForm instance = null;
public ChromiumWebBrowser cefWebBrowser1 { get; set; } = null;
public ChromiumWebBrowser cefWebBrowser2 { get; set; } = null;
public ChromiumWebBrowser cefWebBrowser3 { get; set; } = null;
public List<CefSharp.Cookie> cookies = new List<CefSharp.Cookie>();
public MainForm mf { get; set; }
public DateTime LastGet = DateTime.Now.AddHours(-1);
private bool IsLoadUrl = false;
private string loginUrl = "https://sell.taobao.com/auction/merchandise/auction_list.htm";
/// <summary>
/// 线程委托
/// </summary>
private delegate void delegateViewCode();
public delegate void delegateView();
public delegate void delegateClick(object sender, EventArgs e);
public TaobaoLoginForm()
{
InitializeComponent();
instance = this;
}
private void loginPanel_Click(object sender, EventArgs e)
{
if (cefWebBrowser1 == null)
return;
cefWebBrowser1.Load(loginUrl);
}
private void TaobaoLoginForm_Load(object sender, EventArgs e)
{
Text = "登录淘宝 " + BaseClass.ToolName;
TitleText = "登录淘宝 " + BaseClass.ToolName;
new Thread(CheckLogin).Start();
new Thread(ReflashCookies).Start();
if (BaseClass.Ico != null)
{
Iconx = BaseClass.Ico;
Icon = BaseClass.Ico;
}
cefWebBrowser1 = new ChromiumWebBrowser(loginUrl);
cefWebBrowser1.FrameLoadEnd += cefWebBrowser1_FrameLoadEnd;
cefWebBrowser1.Dock = DockStyle.Fill;
//cefWebBrowser1.RegisterJsObject("bound", new BoundObject(), BindingOptions.DefaultBinder);
// 注册C#类为JS对象
//CefSharpSettings.LegacyJavascriptBindingEnabled = true; //cef 79 84以后:“CefSharpSettings”未包含“LegacyJavascriptBindingEnabled”的定义
CefSharpSettings.WcfEnabled = true;
cefWebBrowser1.JavascriptObjectRepository.Register("bound", new BoundObject(), isAsync: false, options: BindingOptions.DefaultBinder);
//解决cefsharp插件加载导致的偶发性闪屏问题
cefWebBrowser1.BrowserSettings = new BrowserSettings { Plugins = CefState.Disabled };
splitContainer1.Panel1.Controls.Add(cefWebBrowser1);
}
/// <summary>
/// browser页面加载完成事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void cefWebBrowser1_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
{
//切换为账号密码登录方式
cefWebBrowser1.GetBrowser().MainFrame.ExecuteJavaScriptAsync(" document.getElementById('J_Quick2Static').click();");
GetCookies();
Task.Run(() =>
{
var t = cefWebBrowser1.GetBrowser().MainFrame.EvaluateScriptAsync("document.body.outerHTML");
t.Wait(2500);
Cef1Html = t.Result?.Result?.ToString();
});
}
private void GetCookies()
{
cookies.Clear();
var cookieManager = Cef.GetGlobalCookieManager();
CookieVisitor visitor = new CookieVisitor();
visitor.SendCookie += visitor_SendCookie;
cookieManager.VisitAllCookies(visitor);
}
private void CheckLogin()
{
while (true)
{
if (string.IsNullOrEmpty(Cef1Html))
{
continue;
}
if (Cef1Html.Contains("\"登录页面\"改进建议") && !IsLoadUrl)
{
IsLoadUrl = true;
cefWebBrowser1.Load("https://login.taobao.com/member/login.jhtml?style=mini&newMini2=true&redirectURL=https://sell.taobao.com/auction/merchandise/auction_list.htm");
Thread.Sleep(2000);
}
if (!Cef1Html.Contains(">出售中的宝贝<") && !Cef1Html.Contains(">我的宝贝<"))
{
continue;
}
Thread.Sleep(1000);
string htmlStr = Cef1Html.Replace(" ", "");
if (Cef1Html.Contains(">出售中宝贝管理验证<") && htmlStr.Contains("<divclass=\"dredge-pop\"style=\"visibility:visible"))
{
Thread.Sleep(100);
continue;
}
break;
}
MethodInvoker mi = ShowLoading;
BeginInvoke(mi);
// 获取cookies
Invoke(new delegateViewCode(SetUrl));
Thread.Sleep(2000);
//return;
Invoke(new delegateViewCode(GetCookies));
Thread.Sleep(500);
string cookie = "";
for (int i = 0; i < cookies.Count; i++)
{
var c = cookies[i];
if (!c.Domain.Contains("taobao.com"))
continue;
cookie += c.Name + "=" + c.Value + "; ";
}
BaseClass.ChromeCookies = cookie;
LastGet = DateTime.Now;
Invoke(new delegateViewCode(SetWindow));
}
private void SetUrl()
{
string targetUrl = "https://gy.taobao.com/charity_agreement.htm";
cefWebBrowser2 = new ChromiumWebBrowser(targetUrl);
cefWebBrowser2.Dock = DockStyle.None;
cefWebBrowser2.Size = new System.Drawing.Size(1, 1);
cefWebBrowser2.BrowserSettings = new BrowserSettings { Plugins = CefState.Disabled };
splitContainer3.Panel1.Controls.Add(cefWebBrowser2);
targetUrl = "https://www.tmall.com/wow/seller/act/tmallpinkong";
cefWebBrowser3 = new ChromiumWebBrowser(targetUrl);
cefWebBrowser3.Dock = DockStyle.None;
cefWebBrowser3.Size = new System.Drawing.Size(1, 1);
cefWebBrowser3.BrowserSettings = new BrowserSettings { Plugins = CefState.Disabled };
splitContainer3.Panel2.Controls.Add(cefWebBrowser3);
}
private void ReflashCookies()
{
while (true)
{
Thread.Sleep(500);
Invoke(new delegateViewCode(GetCookies));
Thread.Sleep(500);
string cookie = "";
try
{
for (int i = 0; i < cookies.Count; i++)
{
var c = cookies[i];
if (c == null)
{
continue;
}
if (!c.Domain.Contains("taobao.com"))
continue;
cookie += c.Name + "=" + c.Value + "; ";
}
//BaseClass.ChromeCookies = cookie;
for (int i = 0; i < cookies.Count; i++) // 初始化COOKIES缓存
{
var c = cookies[i];
if (c == null)
{
continue;
}
string mainDomain = GetHtml.GetMainDomain(c.Domain);
if (mainDomain == "1688.com")
{
}
if (BaseClass.CookiesAll.ContainsKey(mainDomain))
{
if (BaseClass.CookiesAll[mainDomain].ContainsKey(c.Name))
BaseClass.CookiesAll[mainDomain][c.Name] = c.Value;
else
BaseClass.CookiesAll[mainDomain].Add(c.Name, c.Value);
}
else
{
BaseClass.CookiesAll.Add(mainDomain, new Dictionary<string, string>());
BaseClass.CookiesAll[mainDomain].Add(c.Name, c.Value);
}
}
foreach (KeyValuePair<string, Dictionary<string, string>> co in BaseClass.CookiesAll)//同步到系统
{
string cook = "";
foreach (KeyValuePair<string, string> c in co.Value)
{
cook += c.Key + "=" + c.Value + "; ";
}
if (BaseClass.CookiesAllString.ContainsKey(co.Key))
BaseClass.CookiesAllString[co.Key] = cook;
else
BaseClass.CookiesAllString.Add(co.Key, cook);
}
}
catch (Exception ex)
{
}
}
}
/// <summary>
/// 加载完成时,重设cookies
/// </summary>
/// <param name="obj"></param>
private void visitor_SendCookie(CefSharp.Cookie obj)
{
// 这里可以根据domaiin存储cookie
//cookies += obj.Domain.TrimStart('.') + "^" + obj.Name + "^" + obj.Value + "$";
cookies.Add(obj);
}
private void closePanel_Click(object sender, EventArgs e)
{
if (BaseMsgForm.ShowConfirm("是否关闭软件?\r\n必须登录淘宝账户才能使用,关闭窗口自动退出软件", "请先登录淘宝网").DialogResult == DialogResult.OK)
Process.GetCurrentProcess().Kill();
}
public void SetWindow()
{
SetUrl(cefWebBrowser2, "https://smf.taobao.com/index.htm?menu=activity&module=umptool");
SetUrl(cefWebBrowser3, "https://subway.simba.taobao.com/#!/campaigns/standards/add");
MethodInvoker mi = HideLoading;
BeginInvoke(mi);
Hide();
}
private void HideLoading()
{
pictureBox1.Visible = false;
}
private void ShowLoading()
{
pictureBox1.Visible = true;
}
private void SetUrl(ChromiumWebBrowser web, string url)
{
web.Load(url);
}
private void minPanel_Click(object sender, EventArgs e)
{
WindowState = FormWindowState.Minimized;
}
private void label4_Click(object sender, EventArgs e)
{
SetUrl(cefWebBrowser1, "https://sell.taobao.com/auction/merchandise/auction_list.htm");
}
private void TaobaoLoginForm_FormClosing(object sender, FormClosingEventArgs e)
{
Hide();
e.Cancel = true;
return;
}
#region 内存回收
[DllImport("kernel32.dll", EntryPoint = "SetProcessWorkingSetSize")]
public static extern int SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);
/// <summary>
/// 释放内存
/// </summary>
public static void ClearMemory()
{
GC.Collect();
GC.WaitForPendingFinalizers();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
{
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
}
}
private void pnlAutoLogin_Click(object sender, EventArgs e)
{
}
private void cbxLoginShops_TextUpdate(object sender, EventArgs e)
{
}
private void cbxLoginShops_SelectedIndexChanged(object sender, EventArgs e)
{
pnlAutoLogin_Click(sender, e);
}
#endregion
}
}