diff --git a/JdShopListener/JdShopListener/MainWindowViewModel.cs b/JdShopListener/JdShopListener/MainWindowViewModel.cs index 3eb9d06..69394cc 100644 --- a/JdShopListener/JdShopListener/MainWindowViewModel.cs +++ b/JdShopListener/JdShopListener/MainWindowViewModel.cs @@ -16,6 +16,8 @@ using Utils; using System.Threading.Tasks; using System.IO; using System.IO.Compression; +using System.Text.RegularExpressions; +using System.Diagnostics; namespace JdShopListener { @@ -98,10 +100,87 @@ namespace JdShopListener InitWeb(); }).ContinueWith((state) => { - LoadHYItems(); + + Test(); + // LoadHYItems(); }); } + + private void Test() + { + InitLoginCookie(); + + Stopwatch watch = new Stopwatch(); + watch.Start(); + for (int i = 1; i <= 100; i++) + { + try + { + var list = GetSearchList(i); + + list.ForEach(skuId => + { + try + { + var detail = GetItemDetail(skuId); + + Thread.Sleep(1000); + var sku = new SkuModel() + { + SkuId = skuId + }; + + //主图 + string src = detail.product.src; + var catIds = detail.product.cat; + + List cats = new List(); + + foreach (var catId in catIds) + { + cats.Add((int)catId); + } + + string cat = string.Join(",", cats); + + //标题 + string title = detail.product.name; + + string shopId = detail.product.shopId; + + string vid = detail.product.venderId; + + sku.ImgUrl = "http://img11.360buyimg.com/n1/" + src; + sku.Title = title; + sku.Cat = cat; + sku.ShopId = shopId; + sku.VenderId = vid; + + GetWareBusiness(sku); + + Debug.WriteLine($"{skuId}采集完成!{DateTime.Now}"); + + Thread.Sleep(2000); + } + catch + { + + } + }); + } + catch(Exception ex) + { + + } + Thread.Sleep(1000); + } + + watch.Stop(); + + Debug.WriteLine("100页全面采集花费:" + watch.ElapsedMilliseconds + "毫秒!!!"); + } + private string _InitText= "正在加载慧眼竞品商品数据, 请稍后..."; public string InitText @@ -893,7 +972,7 @@ namespace JdShopListener string html = http.GetStringAsync($"https://item.jd.com/{skuId}.html").Result; - if (html.Contains("passport.jd.com/new/login.aspx")|| html.Contains("//item.jd.com/html/token.html?returnUrl=")) + if (html.Contains("passport.jd.com/new/login.aspx")|| html.Contains("//item.jd.com/html/token.html?returnUrl=" )|| html.Contains("passport.jd.com/uc/login")) { AddLog("登录失效,触发验证!!重新尝试获取登录状态"); InitLoginCookie(); @@ -1213,13 +1292,19 @@ namespace JdShopListener var json= client.GetStringAsync(url).Result; - if (json.Contains("passport.jd.com/new/login.aspx")) + if (json.Contains("passport.jd.com/new/login.aspx") || json.Contains("passport.jd.com/uc/login")) { AddLog("登录失效,触发验证!!重新尝试获取登录状态"); InitLoginCookie(); return GetWareBusiness(model); } + if (json.Length < 100) + { + + } + + json = json.Remove(0, "jQuery6834366(".Length); json = json.Remove(json.Length - 1, 1); @@ -1227,7 +1312,68 @@ namespace JdShopListener return data; } - + + + private List GetSearchList(int page) + { + int pageSize = 25; + + int s = (page - 1) * pageSize + 1; + + string url = $"https://search.jd.com/s_new.php?keyword=%E9%9E%8B%E5%AD%90&wq=%E9%9E%8B%E5%AD%90&pvid=8c8009784e07405f944330cee2f375b3&page={page}&s={s}&click=0"; + + HttpClient client = new HttpClient(); + + client.DefaultRequestHeaders.Add("Cookie", JDCookie); + client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36 SE 2.X MetaSr 1.0"); + + client.DefaultRequestHeaders.Add("Accept", "*/*"); + client.DefaultRequestHeaders.Add("sec-ch-ua", @""" Not A;Brand"";v=""99"", ""Chromium"";v=""102"", ""Google Chrome"";v=""102"""); + client.DefaultRequestHeaders.Add("sec-ch-ua-mobile", "?0"); + client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest"); + client.DefaultRequestHeaders.Add("sec-ch-ua-platform", @"""Windows"""); + client.DefaultRequestHeaders.Add("Referer", "https://search.jd.com/Search?keyword=%E9%9E%8B%E5%AD%90&wq=%E9%9E%8B%E5%AD%90&pvid=8c8009784e07405f944330cee2f375b3&page=5&s=116&click=1"); + /* + sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="102", "Google Chrome";v="102" + +X-Requested-With: XMLHttpRequest +sec-ch-ua-mobile: ?0 +User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36 +sec-ch-ua-platform: "Windows" +Sec-Fetch-Site: same-origin +Sec-Fetch-Mode: cors +Sec-Fetch-Dest: empty +Referer: https://search.jd.com/Search?keyword=%E9%9E%8B%E5%AD%90&wq=%E9%9E%8B%E5%AD%90&pvid=8c8009784e07405f944330cee2f375b3&page=5&s=116&click=1 +Accept-Encoding: gzip, deflate, br +Accept-Language: zh-CN,zh;q=0.9 + + */ + + var json = client.GetStringAsync(url).Result; + + if (json.Contains("passport.jd.com/new/login.aspx")||json.Contains("passport.jd.com/uc/login")) + { + AddLog("登录失效,触发验证!!重新尝试获取登录状态"); + InitLoginCookie(); + return GetSearchList(page); + } + + Regex reg = new Regex(@"data-sku=""([0-9]{1,})"""); + + List data = new List(); + + var matchs= reg.Matches(json); + foreach (Match match in matchs) + { + if (match.Success) + { + data.Add(match.Groups[1].Value); + } + } + + return data; + } + /// /// 将时间戳转换为时间 ///