async System.Threading.Tasks.Task Main(string[] args)
{
var app = CreateApp(args);
var logger = this.GetLogger(app);
var desktop = System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
var file = Path.Combine(desktop, "星荣 pdfurls.txt");
var storeDirectory = Path.Combine(desktop, "星荣笔记");
Directory.CreateDirectory(storeDirectory);
// 安装一下
// Microsoft.Playwright.Program.Main(new string[] { "install" });
using var playwright = await Microsoft.Playwright.Playwright.CreateAsync();
var proxy = new Microsoft.Playwright.Proxy() { Server = "http://192.168.0.90:17890" };
await using var browser = await playwright.Chromium.LaunchAsync(new() { Headless = false, Proxy = proxy });
var page = await browser.NewPageAsync();
var urls = await File.ReadAllLinesAsync(file);
foreach (var url in urls) {
if(string.IsNullOrWhiteSpace(url)){
continue;
}
await page.GotoAsync(url);
var button = await page.WaitForSelectorAsync(@"//div[@data-tooltip='下载']/div");
await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(1.5));
var titles = await page.QuerySelectorAllAsync("//div[@data-tooltip-unhoverable]");
var title = await this.GetTitleAsync(titles);
await button.ClickAsync();
await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(1.5));
var downlaod = await page.WaitForDownloadAsync();
//var filePath = await downlaod.PathAsync();
await System.Threading.Tasks.Task.Delay(TimeSpan.FromSeconds(1.5));
var pdf = Path.Combine(storeDirectory, title);
await downlaod.SaveAsAsync(pdf);
}
}
async System.Threading.Tasks.Task<string> GetTitleAsync(IReadOnlyList<Microsoft.Playwright.IElementHandle> titles)
{
Microsoft.Playwright.IElementHandle? title = null;
foreach (var tmp in titles) {
if(tmp == null){
continue;
}
if (!(await tmp.IsVisibleAsync()))
{
continue;
}
var box = await tmp.BoundingBoxAsync();
if (box == null || box.X < 0 || box.Y < 0 || box.Width <= 0 || box.Height <= 0)
{
continue;
}
var titlebox = title == null ? null : await title.BoundingBoxAsync();
if (titlebox == null || (box.Y < titlebox.Y && box.X < titlebox.X))
{
title = tmp;
}
}
if(title != null){
var checkBox = await title.BoundingBoxAsync();
}
var titleValue = await title?.InnerHTMLAsync();
return titleValue?.Trim() ?? string.Empty;
}
// 返回日志
Microsoft.Extensions.Logging.ILogger GetLogger(Microsoft.Extensions.Hosting.IHost app)
{
var logger = app.Services.GetRequiredService<ILogger<UserQuery>>();
return logger;
}
// 创建应用
Microsoft.Extensions.Hosting.IHost CreateApp(string[] args)
{
Log.Logger = new Serilog.LoggerConfiguration().WriteTo.LINQPad(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message}{NewLine}{Exception}").CreateLogger();
Microsoft.Extensions.Hosting.HostApplicationBuilder builder = Microsoft.Extensions.Hosting.Host.CreateApplicationBuilder(args);
builder.Services.AddLogging(it =>
{
it.ClearProviders();
it.AddSerilog(dispose: true);
});
var app = builder.Build();
return app;
}