using AngleSharp.Html.Dom; using AngleSharp.Html.Parser; using System; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace ScrapingApp { class Program { private static readonly HttpClient _client = new(); static async Task Main() { var urlstring = "您要抓取的網站的 URL"; using var stream = await _client.GetStreamAsync(new Uri(urlstring)); var parser = new HtmlParser(); // 以流的形式取得指定網站的 HTML IHtmlDocument doc = await parser.ParseDocumentAsync(stream); // 下面設定到★部分就可以得到我想要取得的資訊了 // 就是全部了,所以這會根據您想要獲得的內容而有所不同。 var tdElements = doc.GetElementById("Id名").QuerySelectorAll("セレクタ"); var yearStr = DateTime.Now.Year.ToString(); // 將要放入電子郵件正文的內容放入 StringBuilder 中 StringBuilder sb = new(); foreach (var tr in tdElements) { // 網站上未顯示年份,因此新增了該年份 var dttmText = $"{yearStr}/{tr.QuerySelector("セレクタ").TextContent}"; // 如果應用程式執行前一天內有任何更新,它們將被添加到電子郵件正文中 // 這次我們將透過電子郵件發送文字和 URL(href) if (DateTime.Now.AddDays(-1).CompareTo(DateTime.Parse(dttmText)) > 0) break; sb.AppendLine($"{tr.QuerySelector("發佈日期").TextContent} 投稿日付:{dttmText}"); sb.AppendLine(tr.QuerySelector("選擇器").GetAttribute("href")); } // ★ // 從這裡開始,我們使用一個名為 MailKit 的函式庫來傳送電子郵件 var message = new MimeKit.MimeMessage(); message.From.Add(new MimeKit.MailboxAddress("郵件寄件者姓名", "郵件寄件者地址")); message.To.Add(new MimeKit.MailboxAddress("信箱名稱", "信箱位址")); message.Subject = "我正在向您發送有關此內容的通知..."; var textPart = new MimeKit.TextPart(MimeKit.Text.TextFormat.Plain) { Text = string.IsNullOrEmpty(sb.ToString()) ? "我去尋找新的 XX,但沒有找到(;´∀`)\n抱歉給你發了一封無用的電子郵件m(__)m" : sb.ToString() }; message.Body = textPart; using var client = new MailKit.Net.Smtp.SmtpClient(); try { await client.ConnectAsync("smtp.gmail.com", 587); await client.AuthenticateAsync("Gmail電子郵件地址", "Gmail帳戶密碼"); await client.SendAsync(message); await client.DisconnectAsync(true); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } } }