From a3661003b0e5fb09e27dca251d3424ecdaa469e4 Mon Sep 17 00:00:00 2001 From: Antoni Sawicki Date: Fri, 12 Jul 2019 01:51:23 -0700 Subject: [PATCH] add support for sending keys in to web forms --- wrp.go | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/wrp.go b/wrp.go index abdb76c..5c97cba 100644 --- a/wrp.go +++ b/wrp.go @@ -46,6 +46,8 @@ type wrpReq struct { C int64 // #colors X int64 // mouseX Y int64 // mouseY + K string // keys to send + B bool // history back } func (w *wrpReq) parseForm(req *http.Request) { @@ -70,6 +72,15 @@ func (w *wrpReq) parseForm(req *http.Request) { if w.C < 2 || w.C > 256 { w.C = 256 } + w.K = req.FormValue("k") + if w.K == "\\b" { + w.K = "\b" + } else if w.K == "\\r" { + w.K = "\r" + } + if req.FormValue("hist") == "Back" { + w.B = true + } log.Printf("WrpReq from Form: %+v\n", w) } @@ -77,12 +88,14 @@ func (w wrpReq) printPage(out http.ResponseWriter) { out.Header().Set("Content-Type", "text/html") fmt.Fprintf(out, "\n", version) fmt.Fprintf(out, "\nWRP %s\n\n", w.U) - fmt.Fprintf(out, "
", w.U) + fmt.Fprintf(out, "\n") + fmt.Fprintf(out, "", w.U) fmt.Fprintf(out, " \n") fmt.Fprintf(out, "W \n", w.W) fmt.Fprintf(out, "H \n", w.H) fmt.Fprintf(out, "S \n", w.S) fmt.Fprintf(out, "C \n", w.C) + fmt.Fprintf(out, "K \n") fmt.Fprintf(out, "

\n") } @@ -146,23 +159,29 @@ func imgServer(out http.ResponseWriter, req *http.Request) { func (w wrpReq) capture(c string, out http.ResponseWriter) { var pngbuf []byte var gifbuf bytes.Buffer - var loc string var err error - // Navigate to page or process click request if w.X > 0 && w.Y > 0 { log.Printf("%s Mouse Click %d,%d\n", c, w.X, w.Y) chromedp.Run(ctx, chromedp.MouseClickXY(int64(float64(w.X)/w.S), int64(float64(w.Y)/w.S)), - chromedp.Sleep(time.Second*3), - chromedp.Location(&loc)) + ) + } else if w.B { + log.Printf("%s History Back\n", c) + chromedp.Run(ctx, + chromedp.NavigateBack(), + ) + } else if len(w.K) > 0 { + log.Printf("%s Sending Keys: %#v\n", c, w.K) + err = chromedp.Run(ctx, + chromedp.KeyEvent(w.K), + ) } else { log.Printf("%s Processing Capture Request for %s\n", c, w.U) err = chromedp.Run(ctx, emulation.SetDeviceMetricsOverride(int64(float64(w.W)/w.S), int64(float64(w.H)/w.S), w.S, false), chromedp.Navigate(w.U), - chromedp.Sleep(time.Second*3), - chromedp.Location(&loc)) + ) } if err != nil { @@ -177,8 +196,11 @@ func (w wrpReq) capture(c string, out http.ResponseWriter) { return } - log.Printf("%s Landed on: %s\n", c, loc) - w.U = loc + chromedp.Run( + ctx, chromedp.Sleep(time.Second*3), + chromedp.Location(&w.U), + ) + log.Printf("%s Landed on: %s\n", c, w.U) w.printPage(out) // Process Screenshot Image