利用PuppeteerSharp自动登录并截图
public async Task CreateFileByHtmlAsync(ApiDBContent dbContext, WebPageParam setting, int tryCount = 0)
{
string pdfPath = Path.Combine(setting.FilePath, "Pdf", $"{setting.Name}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.pdf");
string imgPath = Path.Combine(setting.FilePath, "Img", $"{setting.Name}_{DateTime.Now.ToString("yyyyMMddHHmmss")}.png");
string url = $"{setting.PageUrl}{setting.ID}";
try
{
/*
淘宝镜像地址https://npm.taobao.org/mirrors/chromium-browser-snapshots
默认下载地址是在启动目录下面:..\.local-chromium\Win64-856583\chrome-win
*/
await new BrowserFetcher().DownloadAsync(856583);
using var browser = await Puppeteer.LaunchAsync(new LaunchOptions
{
Headless = true,
Args = new string[] { "--single-process", "--no-zygote", "--no-sandbox" }
});
if (tryCount == 0)
{
using var pageLogin = await browser.NewPageAsync();
await pageLogin.SetViewportAsync(new ViewPortOptions
{
Width = 1376,
Height = 768
});
await pageLogin.GoToAsync(setting.LoginUrl, WaitUntilNavigation.Networkidle0);
await pageLogin.TypeAsync($"#{setting.LoginNameID}", setting.UserName);
await pageLogin.TypeAsync($"#{setting.LoginPwdID}", setting.UserPwd);
await pageLogin.ClickAsync($"#{setting.LoginBtnID}");
await pageLogin.CloseAsync();
await pageLogin.CloseAsync();
Thread.Sleep(1000);
}
using var page = await browser.NewPageAsync();
await page.SetViewportAsync(new ViewPortOptions
{
Width = 1376,
Height = 768
});
await page.GoToAsync(url, WaitUntilNavigation.Networkidle0);
string content = await page.GetContentAsync();
Regex reg = new Regex("<title>(.*?)</title>", RegexOptions.IgnoreCase | RegexOptions.Singleline);
string title = reg.Match(content).Groups[1].ToString();
if (title == setting.LoginTitle && tryCount == 0)
{
//重试一次
await CreateFileByHtmlAsync(dbContext, setting, 1);
tryCount++;
}
else
{
await page.PdfAsync(pdfPath);
await page.ScreenshotAsync(imgPath, new ScreenshotOptions
{
FullPage = true,
Type = ScreenshotType.Png
});
}
await page.CloseAsync();
await page.CloseAsync();
}
catch (Exception ex)
{
throw ex;
}
}
浙公网安备 33010602011771号