Files
KJD/TEMUKJD/KJDForms/AdminForms/AdminShopLoginForm.cs
T

911 lines
39 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using AllBase;
using AllBase.Helper;
using AllBase.Model.Result;
using CefSharp;
using CefSharp.WinForms;
using TemuKJD.DashBoardForms;
using TemuKJD.Helper;
using TemuKJD.KJDForms.BaseForms;
using Microsoft.Win32;
using NaiBa.CefHelper;
using NaiBa.CefHelper.Handler;
using NaiBa.Util.Extension;
using Newtonsoft.Json.Linq;
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.Web.Hosting;
using System.Windows.Forms;
using Work;
using Work.BLL.Tools;
using TemuKJD.KJDForms.ShopForms;
using TemuKJD.KJDForms.ToolForms;
namespace TemuKJD.KJDForms.AdminForms
{
public partial class AdminShopLoginForm : LRBaseForm
{
public int CloseAfterSecond { get; set; }
public EnumOpenType openType = EnumOpenType.manage;
public bool isMultiLogin = false;
public string MultiLoginCookieName = "";
public string InitUrl = "";
private string shopCookieHead = "kuajingmaihuo.com";
private string shopCookieHead2 = "temu.com";
private string shopLoginUrl = "http://seller.kuajingmaihuo.com/login";
private string shopMainUrl = "https://seller.kuajingmaihuo.com";
private string shopMainUrl2 = "https://agentseller.temu.com";
private ChromiumWebBrowser cefWebBrowser = null;
private ShopLoginInfo shop = null;
private List<ShopCompany> lstShopCompany = new List<ShopCompany>();
private string currentUrl = "";
private long currentSupplierId = 0;
public AdminShopLoginForm(ShopLoginInfo shopInfo)
{
InitializeComponent();
this.shop = shopInfo;
this.txtUserName.Text = shopInfo.LoginName;
this.txtPassWord.Text = DataOpenSSL.DecryptString(shopInfo.Password);
}
private void ShopLoginForm_Load(object sender, EventArgs e)
{
//this.splitContainer1.SplitterDistance = 674;
if (BaseClass.SaLevel == 1)
this.btnReturnPackage.Visible = true;
else
this.btnReturnPackage.Visible = false;
if (openType == EnumOpenType.login)
{
//this.shop.ShopId = "";
//this.shop.ShopAccount = "";
}
if (isMultiLogin && shop != null)
{
this.pnlMultiLogin.Visible = true;
InitMultiLoginCookies();
}
if (CloseAfterSecond > 0)
{
Task.Run(() =>
{
Thread.Sleep(1000 * CloseAfterSecond);
if (this.Created)
{
Invoke(new Action(() => { this.Close(); }));
}
});
}
if (!isMultiLogin)
AutoLogin();
CheckAndSaveShop(); //判断登录是否成功,成功则保存店铺信息和店铺cookie
//ClosePopWindow(); //自动关闭弹窗
}
/// <summary>
/// 判断登录,保存店铺
/// </summary>
private void CheckAndSaveShop()
{
Task.Run(() =>
{
// 自动判断是否登录成功,登录成功后记录cookie保存到服务端。
while (this.Created)
{
Thread.Sleep(3000);
//continue;
if (!this.Created)
break;
if (this.shop != null && currentUrl.TrimEnd('/') == shopMainUrl)
{
if (!cefWebBrowser.GetBrowser().MainFrame.IsValid)
continue;
if (openType!= EnumOpenType.login)
continue;
if (!lstShopCompany.Any(c => c.LoginName == shop.LoginName))
continue;
string cookies = "";
List<Cookie> cookieList = CEFBrowser.GetCookieList(shopCookieHead, cefWebBrowser.RequestContext.GetCookieManager(null));
var keys = new string[] { "a42", "_bee", "_f77", "_nano_fp", "api_uid", "rckk", "ru1k", "ru2k", "SUB_PASS_ID" };
if (cookieList != null && cookieList.Count > 0)
{
foreach (var cookie in cookieList)
{
if (!keys.Contains(cookie.Name))
continue;
//SUB_PASS_ID同时出现两个,domain是seller.kuajingmaihuo.com才是能登录店铺后台的
if (cookie.Name == "SUB_PASS_ID" && cookie.Domain != "seller.kuajingmaihuo.com"
&& cookieList.Any(c=>c.Name== "SUB_PASS_ID" && c.Domain == "seller.kuajingmaihuo.com"))
continue;
cookies += cookie.Name + "=" + cookie.Value + "; ";
}
cookies = cookies.Trim().TrimEnd(';');
}
if (!string.IsNullOrEmpty(cookies)
&& lstShopCompany.Any(c => c.LoginName == shop.LoginName))
{
var lstShopCompanyCopy = lstShopCompany.ToList();
lstShopCompanyCopy = lstShopCompanyCopy.Where(l => l.LoginName == shop.LoginName).ToList();
bool isSuccess = true;
foreach (ShopCompany sc in lstShopCompanyCopy)
{
ShopLoginInfo newShop = new ShopLoginInfo()
{
LoginName = shop.LoginName,
Password = shop.Password,
GroupName = shop.GroupName,
ShopAccount = sc.AccountName,
ShopId = sc.AccountId,
SubUserName = shop.SubUserName,
UserName = shop.UserName,
Notes = shop.Notes,
Cookies = cookies,
};
if (string.IsNullOrEmpty(shop.Cookies)) // 有cookie的认为是已登录过的
{
newShop.LoginStatus = "登录成功";
newShop.LastRefreshDate = DateTime.Now.ToString("yyyyMMdd");
var html = AdminShopListForm.AdminAddServerShop(newShop); // 店铺写入到服务端
if (!html.Contains("\"code\":200"))
isSuccess = false;
}
}
shop.Cookies = cookies;
if (isSuccess)
{
shop.LoginStatus = "登录成功";
ShopListForm.UpdateServerShopCookies(shop); // 店铺cookie写入服务端,多店共用一个登录账号一组cookie
}
//OnSaveComplete(shop);
//if (this.Created && this.chkCloseAfterLogin.Checked)
//{
// Invoke(new Action(() => { this.Close(); }));
//}
//else
// break;
}
//cefWebBrowser.Load(shopMainUrl2);
var shopStatusRst = ShopListForm.GetShopStatus2(shop);
if (!shopStatusRst.Contains("\"success\":true"))
{
//https://agentseller.temu.com/main/authentication?redirectUrl=https%3A%2F%2Fagentseller.temu.com&mallId=634418217169109&asCode=7PaagItuW7ZD1xw2IXNU198596bf60a24327b02d32da6d43f9bcbc40a4b925d0b2ba8c28bd
var codeRst = ShopListForm.GetShopLogin2Code(shop);
if (codeRst.Contains("\"success\":true"))
{
string code = BaseRegex.GetStringJson(ref codeRst, "code");
cefWebBrowser.Load("https://agentseller.temu.com/main/authentication" +
"?redirectUrl=https%3A%2F%2Fagentseller.temu.com&mallId=" + shop.ShopId +
"&asCode=" + code);
}
else
{
//cefWebBrowser.Load("https://agentseller.temu.com");
BaseMsgForm.ShowInfo("获取国际版跳转链接失败,请手动跳转并等待Cookie获取结束!");
}
}
else
{
var cookie2 = shop.Cookies2;
var t = CEFBrowser.SetCookieAsync(shopCookieHead2, cookie2, cefWebBrowser.RequestContext.GetCookieManager(null));
t.Wait(5000);
cefWebBrowser.Load("https://agentseller.temu.com");
}
}
if (1 == 1 && this.shop != null && currentUrl.TrimEnd('/') == shopMainUrl2)
{
//https://agentseller.temu.com
if (!cefWebBrowser.GetBrowser().MainFrame.IsValid)
continue;
if (openType != EnumOpenType.login)
continue;
if (!lstShopCompany.Any(c => c.LoginName == shop.LoginName))
continue;
string cookies2 = "";
List<Cookie> cookieList2 = CEFBrowser.GetCookieList(shopCookieHead2, cefWebBrowser.RequestContext.GetCookieManager(null));
if (cookieList2 != null && cookieList2.Count > 0)
{
for(int i =0; i < cookieList2.Count; i++)
{
var cookie = cookieList2[i];
cookies2 += cookie.Name + "=" + cookie.Value + "; ";
}
cookies2 = cookies2.Trim().TrimEnd(';');
}
if (!string.IsNullOrEmpty(cookies2)
&& lstShopCompany.Any(c => c.LoginName == shop.LoginName))
{
var lstShopCompanyCopy = lstShopCompany.ToList();
lstShopCompanyCopy = lstShopCompanyCopy.Where(l => l.LoginName == shop.LoginName).ToList();
bool isSuccess = true;
foreach (ShopCompany sc in lstShopCompanyCopy)
{
ShopLoginInfo newShop = new ShopLoginInfo()
{
LoginName = shop.LoginName,
Password = shop.Password,
GroupName = shop.GroupName,
ShopAccount = sc.AccountName,
ShopId = sc.AccountId,
SubUserName = shop.SubUserName,
UserName = shop.UserName,
Notes = shop.Notes,
Cookies2 = cookies2,
};
if (string.IsNullOrEmpty(shop.Cookies)) // 有cookie的认为是已登录过的
{
newShop.LoginStatus2 = "国际版在线";
newShop.LastRefreshDate = DateTime.Now.ToString("yyyyMMdd");
var html = AdminShopListForm.AdminAddServerShop(newShop); // 店铺写入到服务端
if (!html.Contains("\"code\":200"))
isSuccess = false;
}
}
shop.Cookies2 = cookies2;
if (isSuccess)
{
shop.LoginStatus2 = "国际版在线";
ShopListForm.UpdateServerShopCookies(shop); // 店铺cookie写入服务端,多店共用一个登录账号一组cookie
}
OnSaveComplete(shop);
if (this.Created && this.chkCloseAfterLogin.Checked)
{
Invoke(new Action(() => { this.Close(); }));
}
else
break;
}
}
}
});
}
/// <summary>
/// 自动关闭弹窗
/// </summary>
private void ClosePopWindow()
{
// 关闭弹窗
Task.Run(() =>
{
var sleepTime = 2500;
int i = 0;
while (true && i++ < 50)
{
try
{
Thread.Sleep(sleepTime);
var jsStr1 = "function ClosePopWindow(txt) {\r\n" +
" var result = 'no_pop'\r\n" +
" var item = document.getElementsByClassName(txt);\r\n" +
" for(i = 0; i < item.length; i++) {\r\n" +
" item[i].click();\r\n" +
" result = 'success'\r\n" +
" }\r\n" +
" return result;\r\n" +
"}\r\n" +
"ClosePopWindow('anticon-close-circle');\r\n" +
"ClosePopWindow('ant-modal-close-x');\r\n";
var jsStr2 = "function clickPopWindow(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_pop';\r\n"
+ "}\r\n"
+ "clickPopWindow('我知道了');\r\n"
+ "clickPopWindow('知道了');\r\n";
if (cefWebBrowser != null && cefWebBrowser.IsBrowserInitialized)
{
var t1 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr1);
t1.Wait();
var t2 = cefWebBrowser.GetMainFrame().EvaluateScriptAsync(jsStr2);
t2.Wait();
if (t1.Result?.Result?.ToString() == "success" || t2.Result?.Result?.ToString() == "success")
sleepTime = Randomx.GetId(550, 650);
else
sleepTime = Randomx.GetId(1500, 2000);
}
}
catch (Exception ex) { }
}
});
}
/// <summary>
/// 自动登录店铺后台
/// </summary>
private void AutoLogin()
{
if (shop == null)
return;
if (cefWebBrowser == null)
{
//cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser("about:blank", false);
if (!string.IsNullOrEmpty(InitUrl))
cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(InitUrl, false);
else
cefWebBrowser = CEFBrowser.CreateChromiumWebBrowser(shopMainUrl, false);
CustomResourceRequestHandlerLocal resourceRequestHandler = new CustomResourceRequestHandlerLocal();
resourceRequestHandler.ResourceLoadCompleteEvent += RequestHandler_ResourceLoadComplete;
cefWebBrowser.RequestHandler = new CustomRequestHandler(resourceRequestHandler);
//var lifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.SelfWindow);
var lifeSpanHandler = new LifeSpanHandlerLocal(PopWindowType.NewTitleWindow);
lifeSpanHandler.parent = cefWebBrowser;
lifeSpanHandler.OnPop += MainLifeHandler_OnPop;
cefWebBrowser.LifeSpanHandler = lifeSpanHandler;
cefWebBrowser.KeyboardHandler = new KeyboardHandler();
cefWebBrowser.FrameLoadEnd += CefWebBrowser_FrameLoadEnd;
cefWebBrowser.AddressChanged += CefWebBrowser_AddressChanged;
cefWebBrowser.LoadError += CefWebBrowser_LoadError;
cefWebBrowser.Dock = DockStyle.Fill;
//js绑定C#对象
ShopBrowserObject shopObj = new ShopBrowserObject();
shopObj.OnInfoReceived += ShopObj_OnInfoReceived;
CefSharpSettings.WcfEnabled = true;
cefWebBrowser.JavascriptObjectRepository.Register(
name: "shopObj",
objectToBind: shopObj,
isAsync: false,
options: new BindingOptions { Binder = BindingOptions.DefaultBinder.Binder /*CamelCaseJavascriptNames = false*/ /*cef79*/ }
);
if (shop.Cookies == null)
shop.Cookies = "";
if (shop.Cookies2 == null)
shop.Cookies2 = "";
var cookie = shop.Cookies;
if (isMultiLogin)
cookie = shop.DictMultiCookies.Keys.Contains(MultiLoginCookieName) ? shop.DictMultiCookies[MultiLoginCookieName] : "";
Task.Run(() =>
{
var t = CEFBrowser.SetCookieAsync(shopCookieHead, cookie, cefWebBrowser.RequestContext.GetCookieManager(null));
t.Wait(5000);
if (this.openType != EnumOpenType.login)
{
var cookie2 = shop.Cookies2;
var t2 = CEFBrowser.SetCookieAsync(shopCookieHead2, cookie2, cefWebBrowser.RequestContext.GetCookieManager(null));
t2.Wait(5000);
}
Invoke(new Action(() =>
{
splitContainer1.Panel1.Controls.Add(cefWebBrowser);
//cefWebBrowser.Load(shopMainUrl);
}));
//根据登录的具体店铺设置local storage
if (!string.IsNullOrEmpty(shop.ShopId))
{
while (!cefWebBrowser.IsBrowserInitialized || !cefWebBrowser.GetBrowser().MainFrame.IsValid)
Thread.Sleep(20);
var storageJsCode = "window.localStorage.setItem('" + "mall-info-id" + "', '" + shop.ShopId + "');\r\n";
cefWebBrowser.GetBrowser().MainFrame.ExecuteJavaScriptAsync(storageJsCode);
//agentseller-mall-info-id
storageJsCode = "window.localStorage.setItem('" + "agentseller-mall-info-id" + "', '" + shop.ShopId + "');\r\n";
cefWebBrowser.GetBrowser().MainFrame.ExecuteJavaScriptAsync(storageJsCode);
}
//不是登录的话就此返回
if (openType != EnumOpenType.login)
{
Invoke(new Action(() =>
{
chkCloseAfterLogin.Visible = false;
btnLoginAgain.Visible = false;
}));
return;
}
for (int i = 0; i < 50; i++)
{
if (cefWebBrowser.IsLoading)
Thread.Sleep(100);
}
Thread.Sleep(Randomx.GetId(1500, 2000));
//设置 local storage
//if (GlobalConfig.dicLocalStorage != null)
//{
// Thread.Sleep(500);
// string jsCode = "function setStorage() {";
// foreach (var item in GlobalConfig.dicLocalStorage)
// {
// if (item.Key == "$TCC_CONFIG" || item.Key == "$TCC_CONFIG_operate_config" || item.Key == "menuStyleStr")
// continue;
// jsCode += "window.localStorage.setItem('" + item.Key + "', '" + item.Value + "');\r\n";
// }
// jsCode += "}";
// jsCode += "setStorage();";
// if (cefWebBrowser.GetBrowser().MainFrame.IsValid)
// cefWebBrowser.GetBrowser().MainFrame.ExecuteJavaScriptAsync(jsCode);
//}
if (!this.Created)
return;
InputUserNameAndPassword(cefWebBrowser, shop.LoginName, DataOpenSSL.DecryptString(shop.Password));
});
}
}
private void MainLifeHandler_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 ShopObj_OnInfoReceived(string information)
{
//BaseMsgForm.ShowInfo(information);
if (!string.IsNullOrEmpty(information))
cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync("alert('" + information + "');");
}
private void CefWebBrowser_LoadError(object sender, CefSharp.LoadErrorEventArgs e)
{
}
private void CefWebBrowser_AddressChanged(object sender, CefSharp.AddressChangedEventArgs e)
{
if (this.Created)
Invoke(new Action(() =>
{
currentUrl = e.Address;
txtAddress.Text = e.Address;
}));
}
private void CefWebBrowser_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e)
{
//if (!cefWebBrowser.IsBrowserInitialized) return;
//currentUrl = e.Url;
//if (currentUrl.StartsWith("https://fxg.jinritemai.com/ffa/multiShop"))
//{
// Thread.Sleep(Randomx.GetId(500, 800));
//}
//if (currentUrl.StartsWith("https://fxg.jinritemai.com/ffa/mshop/homepage/index"))
//{
// Task.Run(() =>
// {
//
// });
//}
//js绑定C#对象 html页面内声明绑定的C#对象
StringBuilder sb = new StringBuilder();
sb.Append("(function(){");
sb.Append("CefSharp.BindObjectAsync('shopObj');");
sb.Append("})();");
cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(sb.ToString());
}
private void RequestHandler_ResourceLoadComplete(object sender, string url, string postData, string responseData, IRequest request)
{
Task.Run(() =>
{
var data = responseData;
if (data.Contains("supplierId") && data.Contains("\"success\":true"))
{
var supplierIds = BaseRegex.GetMatchRegex(ref data, "\"supplierId\":\\d{5,20}");
if(supplierIds.Count > 0 && supplierIds[0].Groups.Count > 0)
{
var supplierId = supplierIds[0].Groups[0].Value.Replace("\"supplierId\":", "").ParseToLong();
if (supplierId > 0)
this.currentSupplierId = supplierId;
}
}
});
if (url.StartsWith("https://seller.kuajingmaihuo.com/settle/site-main"))
{
cefWebBrowser.Load(shopMainUrl);
}
//if (url == shopMainUrl)
if (url == "https://seller.kuajingmaihuo.com/bg/quiet/api/mms/userInfo")
{
Task.Run(() =>
{
var data = responseData;
if (this.shop != null && data.Contains("\"success\":true"))
{
var maskMobile = BaseRegex.GetStringJson(ref data, "maskOwnerMobile");
if (shop.LoginName.EndsWith(maskMobile))
{
lstShopCompany.Clear();
var jObj = JObject.Parse(data);
var jArr = jObj["result"]?["companyList"]?[0]?["malInfoList"] as JArray;
if (jArr == null)
jArr = new JArray();
Thread.Sleep(500);
foreach (var productObj in jArr)
{
var prod = JsonHelper.SerializeObject(productObj);
ShopCompany sc = new ShopCompany()
{
AccountId = BaseRegex.GetStringJson(ref prod, "mallId"),
AccountName = BaseRegex.GetStringJson(ref prod, "mallName"),
LoginName = shop.LoginName,
UserName = BaseClass.UserName,
LoginStatus = "登录成功",
};
this.lstShopCompany.Add(sc);
}
}
}
});
}
//if (url.Contains("_signature"))
//{
// var re = request;
// if ((re.Headers != null && re.Headers.AllKeys.Contains("x-secsdk-csrf-token")))
// {
// }
// Task.Run(() =>
// {
// var _url = url;
// var data = responseData;
// var signature = url.Substring(url.IndexOf("_signature=") + "_signature=".Length).Split('&')[0];
// if (shop != null)
// {
// shop.Signature = signature;
// }
// if (url.Contains("x-secsdk-csrf-token") || postData.Contains("x-secsdk-csrf-token") || data.Contains("x-secsdk-csrf-token"))
// {
// }
// });
//}
if (currentUrl.StartsWith("https://seller.kuajingmaihuo.com/goods/product/list") ||
currentUrl.StartsWith("https://agentseller.temu.com/goods/list"))
{
Task.Run(() => {
string sAddInputJs = @"
document.addEventListener('wheel', function(event) {
// 检查滚动方向
//if (event.deltaY < 0) {
// console.log('向上滚动');
//} else {
// console.log('向下滚动');
//}
// 或者使用 event.deltaX 来检查水平滚动
//if (event.deltaX < 0) {
// console.log('向左滚动');
//} else if (event.deltaX > 0) {
// console.log('向右滚动');
//}
// 阻止默认的滚动行为(如果有需要)
//event.preventDefault();
addGetProdButton();
});
addGetProdButton();
function addGetProdButton() {
var productLst = document.getElementsByClassName('product-info_idContent__iDukx');
for(i=0; i<productLst.length; i++) {
if (productLst[i].innerHTML.indexOf('提取商品') < 0 && productLst[i].innerHTML.indexOf('SPU ID') >= 0) {
var sSpuId = productLst[i].innerText.replace('\r','').replace('\n','').replace('SPU ID:', '');
productLst[i].innerHTML = productLst[i].innerHTML.replace(""></div>"", ""><input type=\""button\"" style=\""margin-left: 50px; width:60px; text-align:center\"" value=\""提取商品\"" onclick=\""shopObj.getProduct('"" + sSpuId + ""'," + this.currentSupplierId + @")\""></div>"");
}
}
}";
cefWebBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(sAddInputJs);
});
}
}
/// <summary>
/// 自动登录
/// </summary>
/// <param name="webBrowser"></param>
/// <param name="_account"></param>
/// <param name="_password"></param>
private void InputUserNameAndPassword(ChromiumWebBrowser webBrowser, string _account, string _password)
{
string jsStr1 = "function getInputItem () {var usernameId = document.getElementById('usernameId'); if (usernameId) return 'true';} getInputItem();";
Task<JavascriptResponse> response1 = null;
while (response1?.Result?.Result == null || !response1.Result.Result.ParseToString().Contains("true"))
{
Thread.Sleep(250);
if (!this.Created)
return;
response1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1);
response1.Wait(5000);
if (!this.Created)
return;
}
webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(sInputValueChange2);
webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(sGetElementWithText);
jsStr1 = "var usernameId = document.getElementById('usernameId'); " +
"changeReactInputValue(usernameId,'" + _account + "');";
response1 = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr1);
response1.Wait(1000);
Thread.Sleep(Randomx.GetId(500, 1000));
string jsStr = "var passwordId = document.getElementById('passwordId'); "+
"changeReactInputValue(passwordId,'" + _password + "');";
var response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr);
response.Wait(1000);
Thread.Sleep(Randomx.GetId(500, 1000));
jsStr = "var clickBox = getElementWithText('我已阅读并同意'); " +
"clickBox.click()";
response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr);
response.Wait(1000);
Thread.Sleep(Randomx.GetId(500, 1000));
jsStr = "var clickBox = getElementWithText('登录'); " +
"clickBox.click()";
response = webBrowser.GetBrowser().MainFrame.EvaluateScriptAsync(jsStr);
response.Wait(1000);
Thread.Sleep(Randomx.GetId(500, 1000));
return;
}
// 鼠标左键按下,移动,移动...左键抬起。
public static void CefMouseDragDou(ChromiumWebBrowser webBrowser, int x1, int y1, int x2, int y2)
{
Thread.Sleep(100);
var host = webBrowser.GetBrowser().GetHost();
var rx = -6 + Randomx.GetId(13);
x2 = x2 + rx;
// 随机按下点的位置(正负6像素),提高仿真性
int x = x1 + rx;
int y = y1 - 6 + Randomx.GetId(13);
// 按下鼠标左键
host.SendMouseClickEvent(x, y, MouseButtonType.Left, false, 1, CefEventFlags.None);
Thread.Sleep(100 + Randomx.GetId(300));
// 滑动光标
int times = -20;
while (x < x2 + 4 - Randomx.GetId(9))
{
times++;
x += (15 + Randomx.GetId(15)) / 8;
if (times % 5 == 0)
y = y - 1 + Randomx.GetId(3);
Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16));
host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton);
}
if (x < x2 - 1)
while (x < x2)
{
times++;
x += (8 + Randomx.GetId(8)) / 8;
if (times % 5 == 0)
y = y - 1 + Randomx.GetId(3);
Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16));
host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton);
}
else if (x > x2 + 1)
while (x > x2)
{
times++;
x -= (8 + Randomx.GetId(8)) / 8;
if (times % 5 == 0)
y = y - 1 + Randomx.GetId(3);
Thread.Sleep(6 + Math.Abs(times) / 5 + Randomx.GetId(16));
host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton);
}
// 如果最后位置偏差较多,再做一次调整
x = x2 - 1 + Randomx.GetId(3);
x = x2;
Thread.Sleep(18 + Math.Abs(times) / 5 + Randomx.GetId(16));
Thread.Sleep(18 + Math.Abs(times) / 5 + Randomx.GetId(16));
host.SendMouseMoveEvent((int)x, (int)y, false, CefEventFlags.LeftMouseButton);
// 抬起鼠标左键
Thread.Sleep(300 + Randomx.GetId(500));
host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None);
host.SendMouseClickEvent(x, y, MouseButtonType.Left, true, 1, CefEventFlags.None);
}
private void btnStop_Click(object sender, EventArgs e)
{
}
private void btnCopyUserName_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(txtUserName.Text))
Clipboard.SetDataObject(txtUserName.Text);
}
private void btnCopyPassword_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(txtPassWord.Text))
Clipboard.SetDataObject(txtPassWord.Text);
}
private void btnReload_Click(object sender, EventArgs e)
{
if (cefWebBrowser != null)
{
if (txtAddress.Text != "about:blank")
cefWebBrowser.Load(txtAddress.Text);
else
cefWebBrowser.Load(shopMainUrl);
}
}
private void ShopLoginForm_FormClosed(object sender, FormClosedEventArgs e)
{
//OnSaveComplete(shop);
}
private void txtAddress_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (cefWebBrowser != null)
{
cefWebBrowser.Load(txtAddress.Text);
}
}
}
private void btnMultiLogin_Click(object sender, EventArgs e)
{
MultiLoginCookieName = cmbMultiCookieName.Text;
AutoLogin();
}
private void btnDel_Click(object sender, EventArgs e)
{
if (shop != null)
{
shop.DictMultiCookies.Remove(cmbMultiCookieName.Text);
StartUp.SaveLocalShopLoginInfo();
InitMultiLoginCookies();
}
}
private void InitMultiLoginCookies()
{
this.cmbMultiCookieName.Items.Clear();
foreach (var cookieKey in shop.DictMultiCookies.Keys)
{
this.cmbMultiCookieName.Items.Add(cookieKey);
}
int i = 1;
foreach (var item in this.cmbMultiCookieName.Items)
{
if (i <= item.ToString().Replace("cookie", "").ParseToInt())
{
i = item.ToString().Replace("cookie", "").ParseToInt() + 1;
}
}
this.cmbMultiCookieName.Items.Insert(0, "cookie" + i);
this.cmbMultiCookieName.Text = "cookie" + i;
}
string sInputValueChange = @"
let usernameId = document.getElementById('usernameId');
usernameId.value = '1';
var event = document.createEvent('HTMLEvents');
event.initEvent('input', true, true);
event.eventType = 'message';
usernameId.dispatchEvent(event);
";
string sInputValueChange2 = @"
function changeReactInputValue(inputDom,newText){
let lastValue = inputDom.value;
inputDom.value = newText;
let event = new Event('input', { bubbles: true });
event.simulated = true;
let tracker = inputDom._valueTracker;
if (tracker) {
tracker.setValue(lastValue);
}
inputDom.dispatchEvent(event);
}
";
string sGetElementWithText = @"
function getElementWithText(sText)
{
var elem=null;
const elements = document.querySelectorAll('*'); // 选择所有元素
elements.forEach(element => {
if (element.textContent.includes(sText)) {
// 对每个匹配的元素执行操作
//console.log(element);
elem=element;
}
});
return elem;
};
";
private void btnLoginAgain_Click(object sender, EventArgs e)
{
if (this.currentUrl != shopLoginUrl)
this.cefWebBrowser.Load(shopLoginUrl);
Task.Run(() =>
{
InputUserNameAndPassword(cefWebBrowser, shop.LoginName, DataOpenSSL.DecryptString(shop.Password));
});
}
private void btnReturnPackage_Click(object sender, EventArgs e)
{
ReturnPackageDetailForm form = new ReturnPackageDetailForm(this.shop);
form.ShowDialog();
}
}
}