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.

116 lines
4.8 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.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;
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<PurchaseSchemeProduct, Purchaser>()
.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<PurchaseSchemeProduct>()
.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);
}
});
}
}
}