345 lines
12 KiB
C#
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
|
|
}
|
|
}
|