package mailx import ( "bytes" "github.com/PuerkitoBio/goquery" ) // html路径替换 func ParseHtmlResource(html string) ([]string, error) { resp := []string{} b := bytes.NewBufferString(html) doc, err := goquery.NewDocumentFromReader(b) if err != nil { return nil, err } // 找到所有的 css 标签,并且打印它们的 href 属性 doc.Find("link").Each(func(i int, s *goquery.Selection) { // 忽略dns预请求 r, ok := s.Attr("rel") if ok && r == "dns-prefetch" { return } href, ok := s.Attr("href") if ok && href != "" { resp = append(resp, href) } }) // 找到所有的 script 标签,并且打印它们的 src 属性 doc.Find("script").Each(func(i int, s *goquery.Selection) { src, ok := s.Attr("src") if ok && src != "" { resp = append(resp, src) } }) // 找到所有的 img 标签,并且打印它们的 src 属性 doc.Find("img").Each(func(i int, s *goquery.Selection) { src, ok := s.Attr("src") if ok && src != "" { resp = append(resp, src) } data_src, ok := s.Attr("data-src") if ok && data_src != "" { resp = append(resp, data_src) } }) // 找到所有的 video 标签,并且打印它们的 src 属性 doc.Find("video").Each(func(i int, s *goquery.Selection) { src, ok := s.Attr("src") if ok && src != "" { resp = append(resp, src) } data_src, ok := s.Attr("data-src") if ok && data_src != "" { resp = append(resp, data_src) } }) // 找到所有的 audio 标签,并且打印它们的 src 属性 doc.Find("audio").Each(func(i int, s *goquery.Selection) { src, ok := s.Attr("src") if ok && src != "" { resp = append(resp, src) } }) return resp, nil }