Skip to content

Commit

Permalink
v0.1.0 release
Browse files Browse the repository at this point in the history
* removed Fiber dependency and move to Gorrila Mux and Websocket
* updated examples
  • Loading branch information
jarylc committed May 26, 2022
1 parent 98ea719 commit 500fa07
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 82 deletions.
1 change: 1 addition & 0 deletions chromedpproxy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ func TestClosingTwoTabsAndCreateOneTab(t *testing.T) {
}
func TestDoubleClose(t *testing.T) {
targetID, err := NewTab("about:blank")

if err != nil {
t.Error(err)
}
Expand Down
2 changes: 1 addition & 1 deletion examples/google_recaptcha_v2/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func main() {
go func() {
err := chromedp.Run(ctx, chromedp.Tasks{
chromedp.Click(`.recaptcha-checkbox-border`, chromedp.NodeVisible),
chromedp.WaitVisible(`#recaptcha-verify-button`),
chromedp.WaitVisible(`#rc-imageselect`, chromedp.NodeVisible),
chromedp.ActionFunc(func(ctx context.Context) error {
log.Print("You would normally send this via any form of notifications to a user:")
log.Printf("Recaptcha detected, please solve it here: http://127.0.0.1:9221/?id=%s", targetID)
Expand Down
3 changes: 1 addition & 2 deletions examples/hcaptcha/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ func main() {
// grab hcaptcha iframe
var iframes []*cdp.Node
err = chromedp.Run(ctx, chromedp.Tasks{
chromedp.SetValue(`#name-2`, "John Doe", chromedp.NodeVisible),
chromedp.Click(`#radio-4`, chromedp.NodeVisible),
chromedp.Click(`#radio-5`, chromedp.NodeVisible),
chromedp.Nodes(`.h-captcha > iframe`, &iframes),
})
if err != nil && !errors.Is(err, context.Canceled) {
Expand Down
86 changes: 54 additions & 32 deletions fiber_frontend.go → frontend.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package chromedpproxy

import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/websocket/v2"
"context"
"github.com/gorilla/mux"
"github.com/gorilla/websocket"
"log"
"os"
"os/signal"
"net/http"
"time"
)

// avoid any packaging by including the front-end html as a variable
Expand Down Expand Up @@ -245,36 +246,41 @@ const html = `<!DOCTYPE html>
</footer>
</html>`

// startFrontEnd starts a blocking Fiber web server that serves the front-end alongside the websocket proxy
var timeout = time.Second * 15

// startFrontEnd starts a blocking web server that serves the front-end alongside the websocket proxy
func startFrontEnd(frontendListenAddr string, cdpPort string, cancelChan chan bool) {
app := fiber.New(fiber.Config{
ReduceMemoryUsage: true,
DisableStartupMessage: true,
})
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
go func() {
select {
case <-interrupt:
app.Shutdown()
case <-cancelChan:
app.Shutdown()
r := mux.NewRouter()

srv := &http.Server{
Addr: frontendListenAddr,
WriteTimeout: timeout,
ReadTimeout: timeout,
IdleTimeout: time.Second * 60,
Handler: r,
}

r.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
_, err := writer.Write([]byte(html))
if err != nil {
log.Printf("Error writing response: %s", err)
}
}()
app.Get("/", func(c *fiber.Ctx) error {
c.Set(fiber.HeaderContentType, fiber.MIMETextHTML)
return c.SendString(html)
})
app.Use("/ws", func(c *fiber.Ctx) error {
if websocket.IsWebSocketUpgrade(c) {
c.Locals("allowed", true)
return c.Next()
r.HandleFunc("/ws/{id}", func(writer http.ResponseWriter, request *http.Request) {
upgrader := websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
}
return fiber.ErrUpgradeRequired
})
app.Get("/ws/:id", websocket.New(func(conn *websocket.Conn) {
proxy, err := startWebsocketProxy(cdpPort, conn)
conn, err := upgrader.Upgrade(writer, request, nil)
if err != nil {
log.Printf("Error upgrading connection: %s", err)
return
}

id := mux.Vars(request)["id"]
proxy, err := startWebsocketProxy(cdpPort, id, conn)
if err != nil {
log.Printf("Error starting websocket proxy: %s", err)
return
}
for {
Expand All @@ -288,10 +294,26 @@ func startFrontEnd(frontendListenAddr string, cdpPort string, cancelChan chan bo
}
}
_ = proxy.Close()
}))
err := app.Listen(frontendListenAddr)
})

go func() {
if err := srv.ListenAndServe(); err != nil {
if err != http.ErrServerClosed {
log.Printf("Error starting frontend: %s", err)
}
}
}()

<-cancelChan
stopFrontEnd(srv)
}

func stopFrontEnd(srv *http.Server) {
ctx, cancel := context.WithTimeout(context.Background(), timeout)
defer cancel()
err := srv.Shutdown(ctx)
if err != nil {
log.Panic(err)
log.Printf("Error shutting down frontend: %v", err)
return
}
}
18 changes: 7 additions & 11 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,18 @@ module github.com/jarylc/go-chromedpproxy
go 1.17

require (
github.com/andybalholm/brotli v1.0.2 // indirect
github.com/chromedp/cdproto v0.0.0-20210713064928-7d28b402946a // indirect
github.com/chromedp/chromedp v0.7.4 // indirect
github.com/chromedp/cdproto v0.0.0-20210713064928-7d28b402946a
github.com/chromedp/chromedp v0.7.4
github.com/gorilla/mux v1.8.0
github.com/gorilla/websocket v1.5.0
)

require (
github.com/chromedp/sysutil v1.0.0 // indirect
github.com/fasthttp/websocket v1.4.3-rc.9 // indirect
github.com/gobwas/httphead v0.1.0 // indirect
github.com/gobwas/pool v0.2.1 // indirect
github.com/gobwas/ws v1.1.0 // indirect
github.com/gofiber/fiber/v2 v2.20.1 // indirect
github.com/gofiber/websocket/v2 v2.0.12 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/klauspost/compress v1.13.4 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/savsgio/gotils v0.0.0-20210921075833-21a6215cb0e4 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.30.0 // indirect
github.com/valyala/tcplisten v1.0.0 // indirect
golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea // indirect
)
37 changes: 5 additions & 32 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,52 +1,25 @@
github.com/andybalholm/brotli v1.0.2 h1:JKnhI/XQ75uFBTiuzXpzFrUriDPiZjlOSzh6wXogP0E=
github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y=
github.com/chromedp/cdproto v0.0.0-20210713064928-7d28b402946a h1:B6EyBXuMsFyrUoBrNXdt+Vf3vQNpN4DU/Xv96R4BdFg=
github.com/chromedp/cdproto v0.0.0-20210713064928-7d28b402946a/go.mod h1:At5TxYYdxkbQL0TSefRjhLE3Q0lgvqKKMSFUglJ7i1U=
github.com/chromedp/chromedp v0.7.4 h1:U+0d3WbB/Oj4mDuBOI0P7S3PJEued5UZIl5AJ3QulwU=
github.com/chromedp/chromedp v0.7.4/go.mod h1:dBj+SXuQHznp6ZPwZeDDEBZKwclUwDLbZ0hjMialMYs=
github.com/chromedp/sysutil v1.0.0 h1:+ZxhTpfpZlmchB58ih/LBHX52ky7w2VhQVKQMucy3Ic=
github.com/chromedp/sysutil v1.0.0/go.mod h1:kgWmDdq8fTzXYcKIBqIYvRRTnYb9aNS9moAV0xufSww=
github.com/fasthttp/websocket v1.4.3-rc.9 h1:CWJH0vONrOatdKXZgkgbFKWllijD9aY50C5KfbSDcWk=
github.com/fasthttp/websocket v1.4.3-rc.9/go.mod h1:eXL2zqDbexYJxaCw8/PQlm7VcMK6uoGvwbYbTdt4dFo=
github.com/gobwas/httphead v0.1.0 h1:exrUm0f4YX0L7EBwZHuCF4GDp8aJfVeBrlLQrs6NqWU=
github.com/gobwas/httphead v0.1.0/go.mod h1:O/RXo79gxV8G+RqlR/otEwx4Q36zl9rqC5u12GKvMCM=
github.com/gobwas/pool v0.2.1 h1:xfeeEhW7pwmX8nuLVlqbzVc7udMDrwetjEv+TZIz1og=
github.com/gobwas/pool v0.2.1/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw=
github.com/gobwas/ws v1.1.0 h1:7RFti/xnNkMJnrK7D1yQ/iCIB5OrrY/54/H930kIbHA=
github.com/gobwas/ws v1.1.0/go.mod h1:nzvNcVha5eUziGrbxFCo6qFIojQHjJV5cLYIbezhfL0=
github.com/gofiber/fiber/v2 v2.20.1 h1:p463gd/RI8YeYxP4WMGS+u1UtBS88yk8oLiPkEiDYx4=
github.com/gofiber/fiber/v2 v2.20.1/go.mod h1:/LdZHMUXZvTTo7gU4+b1hclqCAdoQphNQ9bi9gutPyI=
github.com/gofiber/websocket/v2 v2.0.12 h1:jKwTrXiOut9UGOGEzFTAD6gq+/78mM3NcrI05VbxjAU=
github.com/gofiber/websocket/v2 v2.0.12/go.mod h1:lQRy0u5ACJfiez/e/bhGeYvM0/M940Y3NFw14U3/otI=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/klauspost/compress v1.13.4 h1:0zhec2I8zGnjWcKyLl6i3gPqKANCCn5e9xmviEEeX6s=
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/orisano/pixelmatch v0.0.0-20210112091706-4fa4c7ba91d5 h1:1SoBaSPudixRecmlHXb/GxmaD3fLMtHIDN13QujwQuc=
github.com/orisano/pixelmatch v0.0.0-20210112091706-4fa4c7ba91d5/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0=
github.com/savsgio/gotils v0.0.0-20210921075833-21a6215cb0e4 h1:ocK/D6lCgLji37Z2so4xhMl46se1ntReQQCUIU4BWI8=
github.com/savsgio/gotils v0.0.0-20210921075833-21a6215cb0e4/go.mod h1:oejLrk1Y/5zOF+c/aHtXqn3TFlzzbAgPWg8zBiAHDas=
github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
github.com/valyala/fasthttp v1.29.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus=
github.com/valyala/fasthttp v1.30.0 h1:nBNzWrgZUUHohyLPU/jTvXdhrcaf2m5k3bWk+3Q049g=
github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus=
github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8=
github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc=
golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201207223542-d4d67f95c62d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210514084401-e8d321eab015 h1:hZR0X1kPW+nwyJ9xRxqZk1vx5RUObAPBdKVvXPDUH/E=
golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea h1:+WiDlPBBaO+h9vPNZi8uJ3k4BkKQB7Iow3aqwHVA5hI=
golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
7 changes: 3 additions & 4 deletions websocket_proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@ package chromedpproxy

import (
"fmt"
fhwebsocket "github.com/fasthttp/websocket"
gfwebsocket "github.com/gofiber/websocket/v2"
"github.com/gorilla/websocket"
)

// startWebsocketProxy proxies all messages between Chrome remote debugger websocket to and from requester
func startWebsocketProxy(cdpPort string, requester *gfwebsocket.Conn) (*fhwebsocket.Conn, error) {
conn, _, err := fhwebsocket.DefaultDialer.Dial(fmt.Sprintf("ws://127.0.0.1:%s/devtools/page/%s", cdpPort, requester.Params("id")), nil)
func startWebsocketProxy(cdpPort string, id string, requester *websocket.Conn) (*websocket.Conn, error) {
conn, _, err := websocket.DefaultDialer.Dial(fmt.Sprintf("ws://127.0.0.1:%s/devtools/page/%s", cdpPort, id), nil)
if err != nil {
return nil, err
}
Expand Down

0 comments on commit 500fa07

Please sign in to comment.