京东慧眼
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

136 lines
5.1 KiB

using CefSharp;
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Markup;
using .Models;
namespace .UserControls
{
public partial class BrowerControl
{
/// <summary>
/// 淘宝查询按钮点击
/// </summary>
public void StartTaoBaoSearch()
{
if (!btn_searchItems.IsEnabled)
return;
btn_searchItems.IsEnabled = false;
searchLoding.Visibility=Visibility.Visible;
Task.Factory.StartNew(() =>
{
try
{
List<SearchItemModelExt> totalItems = new List<SearchItemModelExt>();
for (int i = 1; i <= 5; i++)
{
//等待页面加载完成
while (!DoJavaScript("return $(document.body).html();").isOk)
{
Thread.Sleep(100);
}
//切换到当前页
string pageText = (string)DoJavaScript("return $(\"#mainsrp-pager div[class=total]\").text()").result;
pageText = Regex.Match(pageText, @"([1-9]\d*\.?\d*)|(0\.\d*[1-9])").Groups[0].Value.Trim();
int.TryParse(pageText, out int totalPage);
if (totalPage >= i)
{
DoJavaScript($"$($(\"#mainsrp-pager li[class*=item]\")[{i}]).find(\"a\")[0].click()");
Thread.Sleep(500);
}
//等待页面加载完成
while (DoJavaScript("return $(document.body).html();").result?.ToString().Contains("myitemState")!=true)
{
Thread.Sleep(100);
}
if (totalPage != 0)
{
while (DoJavaScript(@"return $(""#mainsrp-pager li[class='item active']"")[0].innerText").result?.ToString() != i.ToString())
{
Thread.Sleep(100);
}
}
//刷新总页数
pageText = (string)DoJavaScript("return $(\"#mainsrp-pager div[class=total]\").text()").result;
pageText = Regex.Match(pageText, @"([1-9]\d*\.?\d*)|(0\.\d*[1-9])").Groups[0].Value.Trim();
int.TryParse(pageText, out totalPage);
DoJavaScript("$(\"#mainsrp-pager li[class*=item]\")[0].scrollIntoView()");
var res = DoJavaScript(@"var ids=[];
$('div#mainsrp-itemlist .items .item').each(function(){
var ele=this;
var itemid= $(ele).find(""a"").attr(""data-nid"");
var infoDiv=$($(ele).find("".J_IconMoreNew""));
var price=infoDiv.find("".g_price"").text();
var sales=infoDiv.find("".deal-cnt"").text();
var title=infoDiv.find("".title"").text();
var img=$(ele).find(""img"").attr(""src"");
if(img==""//g.alicdn.com/s.gif""||img==null||img==undefined)
{
img=$(ele).find(""img"").attr(""data-src"");
}
ids.push({itemid:itemid,price:price,sales:sales,title:title,img:img});
});
return ids;");
List<SearchItemModelExt> itemHtmls = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SearchItemModelExt>>(Newtonsoft.Json.JsonConvert.SerializeObject(res.result));
itemHtmls.ForEach(item =>
{
item.Price = Regex.Match(item.Price, @"([1-9]\d*\.?\d*)|(0\.\d*[1-9])").Groups[0].Value.Trim();
item.Sales = Regex.Match(item.Sales, @"([1-9]\d*\.?\d*)|(0\.\d*[1-9])").Groups[0].Value.Trim();
item.Title = item.Title.Trim();
item.Img = item.Img.StartsWith("//") ? $"https:{item.Img}" : item.Img;
});
//将当前页面的商品加入
totalItems.AddRange(itemHtmls);
if (i>=totalPage)
{
break;
}
Thread.Sleep(2000);
}
}
catch (Exception ex)
{
}
finally
{
Application.Current.Dispatcher.Invoke(() => {
btn_searchItems.IsEnabled = true;
searchLoding.Visibility = Visibility.Collapsed;
});
}
});
}
}
}