目錄
目錄結構
1. appsettings.json(賬號、URL、路徑配置)
2. Program.cs(啟動入口)
3. SchedulerConfig.cs(定時調度)
4. SocialSecurityTask.cs(自動報社保任務)
5. QuerySocialDataTask.cs(查詢導出任務)
6. PublishCsdnTask.cs(發布 CSDN 文章)
7. 后續可加功能
可直接運行的 Playwright C# 自動化模板,里面包含:
- 報社保任務(模擬登錄 → 上傳 Excel)
- 查詢導出任務(模擬登錄 → 查詢 → 下載 Excel)
- 發布文章任務(自動登錄 → 填寫標題與內容 → 發布)
- Quartz.NET 定時調度(可配置執行周期)
- 配置文件管理(賬號、密碼、URL、文件路徑)
- 日志記錄 & 截圖保存
- 驗證碼識別預留接口(可以后續接 Python OCR)
目錄結構
AutoTasks/├── AutoTasks.csproj├── appsettings.json // 配置賬號密碼├── Program.cs // 啟動調度器├── SchedulerConfig.cs // Quartz 調度配置├── Tasks/│ ├── SocialSecurityTask.cs // 報社保任務│ ├── QuerySocialDataTask.cs // 查詢導出任務│ ├── PublishCsdnTask.cs // 發布任務├── Services/│ ├── OcrService.cs // 驗證碼識別接口(可接Python)│ ├── ExcelService.cs // Excel處理│ ├── AiContentService.cs // AI生成文章└── Logs/└── ... // 自動化運行截圖 & 日志
1. appsettings.json(賬號、URL、路徑配置)
{"SocialSecurity": {"LoginUrl": "https://example.com/social/login","Username": "your_username","Password": "your_password","UploadFilePath": "C:\\報表\\社保.xls"},"Csdn": {"LoginUrl": "https://**.net/creation/editor","Username": "your_username","Password": "your_password"},"Paths": {"DownloadFolder": "C:\\數據導出","ScreenshotFolder": "Logs"}
}
2. Program.cs(啟動入口)
using System.Threading.Tasks;class Program
{public static async Task Main(){await SchedulerConfig.Start();Console.WriteLine("任務調度已啟動,按 Ctrl+C 停止。");await Task.Delay(-1);}
}
3. SchedulerConfig.cs(定時調度)
using Quartz;
using Quartz.Impl;public class SchedulerConfig
{public static async Task Start(){StdSchedulerFactory factory = new StdSchedulerFactory();var scheduler = await factory.GetScheduler();await scheduler.Start();// 每月5號 10:00 報社保var socialJob = JobBuilder.Create<SocialSecurityTask>().Build();var socialTrigger = TriggerBuilder.Create().WithCronSchedule("0 0 10 5 * ?").Build();await scheduler.ScheduleJob(socialJob, socialTrigger);// 每周一 09:00 查詢社保數據var queryJob = JobBuilder.Create<QuerySocialDataTask>().Build();var queryTrigger = TriggerBuilder.Create().WithCronSchedule("0 0 9 ? * MON").Build();await scheduler.ScheduleJob(queryJob, queryTrigger);// 每周二 09:30 發布文章var csdnJob = JobBuilder.Create<PublishCsdnTask>().Build();var csdnTrigger = TriggerBuilder.Create().WithCronSchedule("0 30 9 ? * TUE").Build();await scheduler.ScheduleJob(csdnJob, csdnTrigger);}
}
4. SocialSecurityTask.cs(自動報社保任務)
using Quartz;
using Microsoft.Playwright;
using Microsoft.Extensions.Configuration;public class SocialSecurityTask : IJob
{public async Task Execute(IJobExecutionContext context){var config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();var url = config["SocialSecurity:LoginUrl"];var username = config["SocialSecurity:Username"];var password = config["SocialSecurity:Password"];var filePath = config["SocialSecurity:UploadFilePath"];var screenshotFolder = config["Paths:ScreenshotFolder"];using var playwright = await Playwright.CreateAsync();var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false });var page = await browser.NewPageAsync();try{await page.GotoAsync(url);await page.FillAsync("#username", username);await page.FillAsync("#password", password);// TODO: 驗證碼處理 - 調用 OcrService// var captchaText = await OcrService.RecognizeAsync(page);// await page.FillAsync("#captcha", captchaText);await page.ClickAsync("#loginBtn");await page.SetInputFilesAsync("input[type='file']", filePath);await page.ClickAsync("#submitBtn");await page.ScreenshotAsync(new PageScreenshotOptions{Path = $"{screenshotFolder}\\SocialSecurity_{DateTime.Now:yyyyMMddHHmmss}.png"});}catch (Exception ex){Console.WriteLine($"報社保任務失敗: {ex.Message}");}finally{await browser.CloseAsync();}}
}
5. QuerySocialDataTask.cs(查詢導出任務)
using Quartz;
using Microsoft.Playwright;public class QuerySocialDataTask : IJob
{public async Task Execute(IJobExecutionContext context){Console.WriteLine("執行社保數據查詢并導出...");// 和 SocialSecurityTask 類似,登錄后執行查詢與下載}
}
6. PublishCsdnTask.cs(發布 CSDN 文章)
using Quartz;
using Microsoft.Playwright;public class PublishCsdnTask : IJob
{public async Task Execute(IJobExecutionContext context){Console.WriteLine("執行發布文章任務...");// 登錄,填寫標題和內容,點擊發布}
}
7. 后續可加功能
- 驗證碼自動識別:OcrService 接入 Python 腳本或打碼平臺
- Excel 數據處理:ExcelService 用 EPPlus 讀取、寫入 Excel
- 文章 AI 生成:AiContentService 調用 GPT API 生成內容
- 任務失敗重試:Quartz 支持失敗任務重試策略
- 打包成 EXE:
dotnet publish -r win-x64