mirror of
https://github.com/tenox7/wrp.git
synced 2025-02-20 00:28:56 +00:00
support unlimited page lenght via height=0
This commit is contained in:
parent
b058831ec6
commit
6449c64e36
36
wrp.go
36
wrp.go
@ -15,6 +15,7 @@ import (
|
|||||||
"image/gif"
|
"image/gif"
|
||||||
"image/png"
|
"image/png"
|
||||||
"log"
|
"log"
|
||||||
|
"math"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
@ -27,12 +28,13 @@ import (
|
|||||||
|
|
||||||
"github.com/chromedp/cdproto/css"
|
"github.com/chromedp/cdproto/css"
|
||||||
"github.com/chromedp/cdproto/emulation"
|
"github.com/chromedp/cdproto/emulation"
|
||||||
|
"github.com/chromedp/cdproto/page"
|
||||||
"github.com/chromedp/chromedp"
|
"github.com/chromedp/chromedp"
|
||||||
"github.com/ericpauley/go-quantize/quantize"
|
"github.com/ericpauley/go-quantize/quantize"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
version = "4.4"
|
version = "4.5"
|
||||||
srv http.Server
|
srv http.Server
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
@ -61,11 +63,9 @@ func (w *wrpReq) parseForm(req *http.Request) {
|
|||||||
w.U = fmt.Sprintf("http://www.google.com/search?q=%s", url.QueryEscape(w.U))
|
w.U = fmt.Sprintf("http://www.google.com/search?q=%s", url.QueryEscape(w.U))
|
||||||
}
|
}
|
||||||
w.W, _ = strconv.ParseInt(req.FormValue("w"), 10, 64)
|
w.W, _ = strconv.ParseInt(req.FormValue("w"), 10, 64)
|
||||||
if w.W < 10 {
|
|
||||||
w.W = 1152
|
|
||||||
}
|
|
||||||
w.H, _ = strconv.ParseInt(req.FormValue("h"), 10, 64)
|
w.H, _ = strconv.ParseInt(req.FormValue("h"), 10, 64)
|
||||||
if w.H < 10 {
|
if w.W < 10 && w.H < 10 {
|
||||||
|
w.W = 1152
|
||||||
w.H = 600
|
w.H = 600
|
||||||
}
|
}
|
||||||
w.S, _ = strconv.ParseFloat(req.FormValue("s"), 64)
|
w.S, _ = strconv.ParseFloat(req.FormValue("s"), 64)
|
||||||
@ -115,7 +115,6 @@ func pageServer(out http.ResponseWriter, req *http.Request) {
|
|||||||
log.Printf("%s Page Request for %s [%+v]\n", req.RemoteAddr, req.URL.Path, req.URL.RawQuery)
|
log.Printf("%s Page Request for %s [%+v]\n", req.RemoteAddr, req.URL.Path, req.URL.RawQuery)
|
||||||
var w wrpReq
|
var w wrpReq
|
||||||
w.parseForm(req)
|
w.parseForm(req)
|
||||||
|
|
||||||
if len(w.U) > 4 {
|
if len(w.U) > 4 {
|
||||||
w.capture(req.RemoteAddr, out)
|
w.capture(req.RemoteAddr, out)
|
||||||
} else {
|
} else {
|
||||||
@ -202,10 +201,7 @@ func (w wrpReq) capture(c string, out http.ResponseWriter) {
|
|||||||
err = chromedp.Run(ctx, chromedp.KeyEvent(w.K))
|
err = chromedp.Run(ctx, chromedp.KeyEvent(w.K))
|
||||||
} else {
|
} else {
|
||||||
log.Printf("%s Processing Capture Request for %s\n", c, w.U)
|
log.Printf("%s Processing Capture Request for %s\n", c, w.U)
|
||||||
err = chromedp.Run(ctx,
|
err = chromedp.Run(ctx, chromedp.Navigate(w.U))
|
||||||
emulation.SetDeviceMetricsOverride(int64(float64(w.W)/w.S), int64(float64(w.H)/w.S), w.S, false),
|
|
||||||
chromedp.Navigate(w.U),
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err.Error() == "context canceled" {
|
if err.Error() == "context canceled" {
|
||||||
@ -220,19 +216,33 @@ func (w wrpReq) capture(c string, out http.ResponseWriter) {
|
|||||||
}
|
}
|
||||||
var styles []*css.ComputedProperty
|
var styles []*css.ComputedProperty
|
||||||
var r, g, b int
|
var r, g, b int
|
||||||
|
var h int64
|
||||||
|
var pngcap []byte
|
||||||
chromedp.Run(ctx,
|
chromedp.Run(ctx,
|
||||||
|
emulation.SetDeviceMetricsOverride(int64(float64(w.W)/w.S), 10, w.S, false),
|
||||||
chromedp.Sleep(time.Second*2),
|
chromedp.Sleep(time.Second*2),
|
||||||
chromedp.ComputedStyle("body", &styles, chromedp.ByQuery),
|
|
||||||
chromedp.Location(&w.U),
|
chromedp.Location(&w.U),
|
||||||
|
chromedp.ComputedStyle("body", &styles, chromedp.ByQuery),
|
||||||
|
chromedp.ActionFunc(func(ctx context.Context) error {
|
||||||
|
_, _, s, err := page.GetLayoutMetrics().Do(ctx)
|
||||||
|
if err == nil {
|
||||||
|
h = int64(math.Ceil(s.Height))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}),
|
||||||
)
|
)
|
||||||
log.Printf("%s Landed on: %s\n", c, w.U)
|
|
||||||
for _, style := range styles {
|
for _, style := range styles {
|
||||||
if style.Name == "background-color" {
|
if style.Name == "background-color" {
|
||||||
fmt.Sscanf(style.Value, "rgb(%d,%d,%d)", &r, &g, &b)
|
fmt.Sscanf(style.Value, "rgb(%d,%d,%d)", &r, &g, &b)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
log.Printf("%s Landed on: %s, Height: %v\n", c, w.U, h)
|
||||||
w.printPage(out, fmt.Sprintf("#%02X%02X%02X", r, g, b))
|
w.printPage(out, fmt.Sprintf("#%02X%02X%02X", r, g, b))
|
||||||
var pngcap []byte
|
if w.H == 0 && h > 0 {
|
||||||
|
chromedp.Run(ctx, emulation.SetDeviceMetricsOverride(int64(float64(w.W)/w.S), h+30, w.S, false))
|
||||||
|
} else {
|
||||||
|
chromedp.Run(ctx, emulation.SetDeviceMetricsOverride(int64(float64(w.W)/w.S), int64(float64(w.H)/w.S), w.S, false))
|
||||||
|
}
|
||||||
err = chromedp.Run(ctx, chromedp.CaptureScreenshot(&pngcap))
|
err = chromedp.Run(ctx, chromedp.CaptureScreenshot(&pngcap))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("%s Failed to capture screenshot: %s\n", c, err)
|
log.Printf("%s Failed to capture screenshot: %s\n", c, err)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user