Files
mailx/html.go
T
2024-08-23 15:09:37 +08:00

78 lines
1.7 KiB
Go

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
}