-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathheadless.go
76 lines (62 loc) · 1.36 KB
/
headless.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package main
import (
"context"
"log"
"time"
"github.com/chromedp/cdproto/cdp"
"github.com/chromedp/cdproto/page"
chromedp "github.com/chromedp/chromedp"
"github.com/chromedp/chromedp/client"
)
// Headless service
type Headless struct {
cdp *chromedp.CDP
ctx context.Context
cancel context.CancelFunc
}
//Pdf model
type Pdf struct {
Filename string
Content []byte
}
//NewHeadless service
func NewHeadless(url string) Headless {
var err error
// create context
ctxt, cancel := context.WithCancel(context.Background())
// create chrome
//cpd, err := chromedp.New(ctxt, chromedp.WithTargets(client.New().WatchPageTargets(ctxt)), chromedp.WithLog(log.Printf))
c := client.New()
client.URL(url)(c)
cpd, err := chromedp.New(ctxt, chromedp.WithTargets(c.WatchPageTargets(ctxt)))
if err != nil {
log.Fatal(err)
}
return Headless{cpd, ctxt, cancel}
}
//PrintPdf generate pdf
func (h Headless) PrintPdf(name string, source string) Pdf {
var buf []byte
err := h.cdp.Run(
h.ctx,
chromedp.Tasks{
chromedp.Navigate(source),
chromedp.Sleep(500 * time.Millisecond),
chromedp.ActionFunc(func(ctxt context.Context, e cdp.Executor) error {
var err error
buf, err = page.PrintToPDF().Do(ctxt, e)
if err != nil {
return err
}
return err
}),
},
)
if err != nil {
log.Fatal(err)
}
return Pdf{
name + ".pdf",
buf,
}
}