本文示範在 ASP.NET 伺服器端啟動 IE 瀏覽器載入指定網址,等待載入完成後透過 Graphics.CopyFromScreen 擷取螢幕畫面並儲存為 JPEG 檔案。此技術常用於自動化報表產生、網頁封存或視覺化驗證。
完整實作程式碼
using System.Drawing;
using System.Diagnostics;
using System.Threading;
// 1. 啟動 IE 載入目標頁面
Process.Start("IEXPLORE.EXE", "https://localhost:56/Spacxxe.html");
Thread.Sleep(3000); // 等待頁面載入
// 2. 建立畫布並擷取螢幕區域
Image templateImage = new Bitmap(1040, 700);
Graphics templateG = Graphics.FromImage(templateImage);
// 來源螢幕座標 (200,100) → 畫布 (0,0),擷取 1000x900
templateG.CopyFromScreen(new Point(200, 100), new Point(0, 0), new Size(1000, 900), CopyPixelOperation.MergeCopy);
// 3. 關閉 IE 進程
foreach (var ps in Process.GetProcessesByName("IEXPLORE")) ps.Kill();
// 4. 儲存圖片
templateImage.Save($@"E:\TEST\{imgname}.jpg", Imaging.ImageFormat.Jpeg);
關鍵點解析
| 步驟 | 說明 |
Process.Start | 啟動 IE,需確認伺服器已安裝 IE 且允許互動式服務 |
Thread.Sleep | 簡易等待,實務建議改用 WebBrowser 控制項或 Selenium 等待載入完成事件 |
CopyFromScreen | 從螢幕座標複製像素到 Bitmap,需以互動式帳號執行 IIS |
Process.Kill | 關閉所有 IE 進程,若多使用者環境請改用 PID 精確關閉 |
部署注意事項
- IIS 應用程式集區需啟用「載入使用者設定檔」並以具桌面互動權限的帳號執行
- 伺服器需安裝桌面體驗功能,否則
System.Drawing 可能失效
- 現代架構建議改用 Headless Chrome (Puppeteer/Playwright) 或 Selenium WebDriver,跨平台且穩定
替代方案比較