78 lines
1.6 KiB
Go
78 lines
1.6 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
|
|
|
|
}
|