package core import ( "bytes" "fmt" "hash/fnv" "strings" "github.com/PuerkitoBio/goquery" "golang.org/x/net/html" ) // NewDocument create a new document func NewDocument(htmlContent []byte) (*goquery.Document, error) { docNode, err := html.Parse(bytes.NewReader(htmlContent)) if err != nil { return nil, err } return goquery.NewDocumentFromNode(docNode), nil } // NewDocumentString create a new document func NewDocumentString(htmlContent string) (*goquery.Document, error) { docNode, err := html.Parse(strings.NewReader(htmlContent)) if err != nil { return nil, err } return goquery.NewDocumentFromNode(docNode), nil } // NewDocumentStringWithWrapper create a new document with a wrapper func NewDocumentStringWithWrapper(htmlContent string) (*goquery.Document, error) { doc, err := NewDocumentString(htmlContent) if err != nil { return nil, err } // Check if the doc has root element add a div wrapper nodes := doc.Find("Body *").Nodes if len(nodes) == 1 { sel := goquery.NewDocumentFromNode(nodes[0]) if _, has := sel.Attr("is"); has { doc, err := NewDocumentString(fmt.Sprintf("