/// <summary> /// 测试无头浏览器 /// </summary> /// <param name="isDisplay">是否显示界面</param> /// <returns></returns> private async Task TestHeadlessChromiumAsync(bool isDisplay = true) { this.Invoke(new Action(() => { this.rTxt_log.AppendText("正在启动无头浏览器... \n"); })); #region 兼容 Win7 及以下系统 (包含 Win7) LaunchOptions launchOptions; if (OSHelper.IsWin7Under()) { launchOptions = new LaunchOptions { WebSocketFactory = async(uri, socketOptions, cancellationToken) => { var client = SystemClientWebSocket.CreateClientWebSocket(); if (client is System.Net.WebSockets.Managed.ClientWebSocket managed) { managed.Options.KeepAliveInterval = TimeSpan.FromSeconds(0); await managed.ConnectAsync(uri, cancellationToken); } else { var coreSocket = client as ClientWebSocket; coreSocket.Options.KeepAliveInterval = TimeSpan.FromSeconds(0); await coreSocket.ConnectAsync(uri, cancellationToken); } return(client); } }; } else { launchOptions = new LaunchOptions(); } launchOptions.Headless = !isDisplay; // Headless true 是无头模式;false 是开发者模式,有界面 #endregion string htmlContent = string.Empty; // 启动 Chromium 浏览器 using (Browser browser = await Puppeteer.LaunchAsync(launchOptions)) { this.Invoke(new Action(() => { this.rTxt_log.AppendText("无头浏览器已启动。 \n"); })); // 新建一个标签页 using (Page page = await browser.NewPageAsync()) { // 导航到 url 页 await page.GoToAsync(_testUrl); string fileName = DateTime.Now.ToString("yyyy-MM-dd_HH.mm.ss"); // 保存截图 await page.ScreenshotAsync($"{SavePageDirectory}{fileName}.png"); // 获取并返回页面的 Html 内容 htmlContent = await page.GetContentAsync(); // 保存 Html 内容 WriteCreate($"{SavePageDirectory}{fileName}.html", htmlContent); this.Invoke(new Action(() => { this.rTxt_log.AppendText($"测试页面已保存成功。目录 ==> {SavePageDirectory} \n"); })); // 界面停留,给开发人员看 await Task.Delay(14 * 1000); } } }