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.
184 lines
8.3 KiB
184 lines
8.3 KiB
using BBWYB.Common.Extensions;
|
|
using BBWYB.Server.Model.Db;
|
|
using Microsoft.Web.WebView2.Core;
|
|
using Microsoft.Web.WebView2.Wpf;
|
|
using System.IO;
|
|
using System.Reflection.Metadata;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Windows;
|
|
using io = System.IO;
|
|
|
|
namespace BBWYB.PurchaserCapture
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for MainWindow.xaml
|
|
/// </summary>
|
|
public partial class MainWindow : Window
|
|
{
|
|
private IFreeSql fsql;
|
|
private WebView2 wb2;
|
|
private string purchaserId;
|
|
private string purchaserMemberId;
|
|
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
|
|
fsql = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=bbwyb;charset=utf8;sslmode=none;").Build();
|
|
this.Loaded += MainWindow_Loaded;
|
|
}
|
|
|
|
private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
|
|
{
|
|
wb2 = new WebView2();
|
|
grid.Children.Add(wb2);
|
|
var wb2Setting = CoreWebView2Environment.CreateAsync(userDataFolder: io.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "AdvUnion.Capturer")).Result;
|
|
wb2.CoreWebView2InitializationCompleted += Wb2_CoreWebView2InitializationCompleted;
|
|
await wb2.EnsureCoreWebView2Async(wb2Setting);
|
|
wb2.CoreWebView2.AddWebResourceRequestedFilter("*", CoreWebView2WebResourceContext.All);
|
|
wb2.CoreWebView2.WebResourceResponseReceived += CoreWebView2_WebResourceResponseReceived;
|
|
wb2.CoreWebView2.WebResourceRequested += CoreWebView2_WebResourceRequested;
|
|
wb2.CoreWebView2.NavigationCompleted += CoreWebView2_NavigationCompleted;
|
|
wb2.CoreWebView2.Navigate("https://www.1688.com");
|
|
}
|
|
|
|
private void CoreWebView2_NavigationCompleted(object? sender, CoreWebView2NavigationCompletedEventArgs e)
|
|
{
|
|
var scriptBuilder = new StringBuilder();
|
|
scriptBuilder.AppendLine("var divElement = document.querySelector('div[style=\"position: relative; display: flex; flex-direction: row;\"]');");
|
|
scriptBuilder.AppendLine("var mouseeoverEvent = new MouseEvent('mouseover', {'view': window,'bubbles': true,'cancelable': false});");
|
|
scriptBuilder.AppendLine("divElement.dispatchEvent(mouseeoverEvent);");
|
|
wb2.CoreWebView2.ExecuteScriptAsync(scriptBuilder.ToString());
|
|
}
|
|
|
|
private async void CoreWebView2_WebResourceResponseReceived(object? sender, CoreWebView2WebResourceResponseReceivedEventArgs e)
|
|
{
|
|
if (e.Request.Method.ToUpper() != "GET" ||
|
|
!e.Request.Uri.StartsWith("https://h5api.m.1688.com/h5/mtop.alibaba.alisite.cbu.server.moduleasyncservice") ||
|
|
!e.Request.Uri.Contains("wp_pc_common_header"))
|
|
{
|
|
Console.WriteLine($"不满足URL规则,已忽略 {e.Request.Uri}");
|
|
return;
|
|
}
|
|
if (e.Response.StatusCode != 200)
|
|
{
|
|
Console.WriteLine($"HttpCode {e.Response.StatusCode},已忽略 {e.Request.Uri}");
|
|
return;
|
|
}
|
|
try
|
|
{
|
|
var stream = await e.Response.GetContentAsync();
|
|
var sr = new StreamReader(stream);
|
|
var content = sr.ReadToEnd();
|
|
sr.Dispose();
|
|
var match = Regex.Match(content, "\"bizTypeName\":\\s?\"(.*)\",\"isShili");
|
|
if (!match.Success)
|
|
{
|
|
Console.WriteLine($"bizTypeName解析失败,已忽略 {e.Request.Uri}");
|
|
return;
|
|
}
|
|
var bizTypeName = match.Groups[1].Value;
|
|
Console.WriteLine(bizTypeName);
|
|
if (!string.IsNullOrEmpty(purchaserId))
|
|
{
|
|
if (!string.IsNullOrEmpty(purchaserMemberId))
|
|
{
|
|
if (!content.Contains(purchaserMemberId))
|
|
{
|
|
Console.WriteLine($"memberId验证失败,已忽略 {e.Request.Uri}");
|
|
return;
|
|
}
|
|
}
|
|
Console.ForegroundColor = ConsoleColor.Green;
|
|
Console.WriteLine($"更新采购商{purchaserId}");
|
|
Console.ResetColor();
|
|
fsql.Update<Purchaser>(purchaserId).Set(p => p.ManagmentModeText, bizTypeName).ExecuteAffrows();
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine(ex.Message);
|
|
}
|
|
}
|
|
|
|
private void CoreWebView2_WebResourceRequested(object? sender, CoreWebView2WebResourceRequestedEventArgs e)
|
|
{
|
|
|
|
|
|
}
|
|
|
|
private void Wb2_CoreWebView2InitializationCompleted(object? sender, CoreWebView2InitializationCompletedEventArgs e)
|
|
{
|
|
|
|
}
|
|
|
|
private void SetInfo(string msg)
|
|
{
|
|
this.Dispatcher.Invoke(() => txtInfo.Text = msg);
|
|
}
|
|
|
|
private void Navigate(string url)
|
|
{
|
|
this.Dispatcher.Invoke(() =>
|
|
{
|
|
txt_url.Text = url;
|
|
wb2.CoreWebView2.Navigate(url);
|
|
});
|
|
}
|
|
|
|
private void btn_start_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
Task.Factory.StartNew(() =>
|
|
{
|
|
var sk = "order";
|
|
//var sk = "consign";
|
|
|
|
var select = fsql.Select<OrderPurchaseInfo, Purchaser>()
|
|
.InnerJoin((opi, p) => opi.PurchaserId == p.Id)
|
|
.Where((opi, p) => string.IsNullOrEmpty(p.ManagmentModeText))
|
|
.GroupBy((opi, p) => new { p.Id, p.MemberId })
|
|
.WithTempQuery(g => new
|
|
{
|
|
MaxPoId = g.Max(g.Value.Item1.PurchaseOrderId),
|
|
PurchaserId = g.Key.Id,
|
|
g.Key.MemberId
|
|
})
|
|
.From<OrderPurchaseSkuInfo>()
|
|
.InnerJoin((opi1, ops) => opi1.MaxPoId == ops.PurchaseOrderId)
|
|
.GroupBy((opi1, ops) => new { opi1.PurchaserId, opi1.MemberId, opi1.MaxPoId, ops.PurchaseProductId });
|
|
var sql = select.ToSql(g => new { g.Key.PurchaserId, g.Key.MemberId, g.Key.MaxPoId, g.Key.PurchaseProductId });
|
|
var pspList = select.ToList(g => new { g.Key.PurchaserId, g.Key.MemberId, g.Key.MaxPoId, g.Key.PurchaseProductId });
|
|
|
|
|
|
|
|
|
|
//var pspList = fsql.Select<PurchaseSchemeProduct, Purchaser>()
|
|
// .InnerJoin((psp2, p) => psp2.PurchaserId == p.Id)
|
|
// .Where((psp2, p) => string.IsNullOrEmpty(p.ManagmentModeText))
|
|
// .GroupBy((psp2, p) => new { p.Id, p.MemberId })
|
|
// .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id), PurchaserId = g.Key.Id, MemberId = g.Key.MemberId })
|
|
// .From<PurchaseSchemeProduct>()
|
|
// .InnerJoin((psp2, psp1) => psp2.MaxId == psp1.Id)
|
|
// .OrderByDescending((psp2, psp1) => Guid.NewGuid())
|
|
// .ToList((psp2, psp1) => new
|
|
// {
|
|
// psp1.PurchaserId,
|
|
// psp2.MemberId,
|
|
// psp1.PurchaseProductId
|
|
// });
|
|
|
|
for (var i = 0; i < pspList.Count; i++)
|
|
{
|
|
SetInfo($"{i + 1}/{pspList.Count}");
|
|
purchaserId = pspList[i].PurchaserId;
|
|
purchaserMemberId = pspList[i].MemberId;
|
|
var url = $"https://detail.1688.com/offer/{pspList[i].PurchaseProductId}.html?clickid={Guid.NewGuid().ToString().Md5Encrypt()}&sessionid={Guid.NewGuid().ToString().Md5Encrypt()}&sk={sk}";
|
|
Navigate(url);
|
|
|
|
Thread.Sleep(10000);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|