using BBWYB.Common.Extensions; using BBWYB.Server.Model.Db; using Microsoft.Web.WebView2.Core; using Microsoft.Web.WebView2.Wpf; using System.IO; using System.Text.RegularExpressions; using System.Windows; using io = System.IO; namespace BBWYB.PurchaserCapture { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private IFreeSql fsql; private WebView2 wb2; 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; } 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; } var stream = await e.Response.GetContentAsync(); var sr = new StreamReader(stream); var content = sr.ReadToEnd(); sr.Dispose(); var match = Regex.Match(content, "\"bizTypeName\":\\s?\"(.+)\","); if (!match.Success) { Console.WriteLine($"bizTypeName解析失败,已忽略 {e.Request.Uri}"); return; } var bizTypeName = match.Groups[1].Value; Console.WriteLine(bizTypeName); } 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(() => wb2.CoreWebView2.Navigate(url)); } private void btn_start_Click(object sender, RoutedEventArgs e) { Task.Factory.StartNew(() => { var sk = "order"; //var sk = "consign"; var pspList = fsql.Select() .InnerJoin((psp2, p) => psp2.PurchaserId == p.Id) .Where((psp2, p) => string.IsNullOrEmpty(p.ManagmentMode)) .GroupBy((psp2, p) => psp2.PurchaserId) .WithTempQuery(g => new { MaxId = g.Max(g.Value.Item1.Id), PurchaserId = g.Key }) .From() .InnerJoin((psp2, psp1) => psp2.MaxId == psp1.Id) .OrderByDescending((psp2, psp1) => psp1.Id) .ToList((psp2, psp1) => psp1); for (var i = 0; i < pspList.Count; i++) { SetInfo($"{i + 1}/{pspList.Count}"); 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(60000); } }); } } }