chromedp / chromedp

A faster, simpler way to drive browsers supporting the Chrome DevTools Protocol.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Can't use proxy and open multiple tabs ?

conku opened this issue · comments

What versions are you running?

github.com/chromedp/chromedp v0.9.5
google-chrome 123.0.6312.58
go 1.21.3

What did you do? Include clear steps.

package main

import (
	"context"

	"github.com/chromedp/cdproto/cdp"
	"github.com/chromedp/cdproto/target"
	"github.com/chromedp/chromedp"
)

func main() {
	browserCtx, cancel := chromedp.NewContext(context.Background())
	defer cancel()
	if err := chromedp.Run(browserCtx); err != nil {
		panic(err)
	}

	// Create BrowserContext with different proxies.
	var proxy1, proxy2 cdp.BrowserContextID
	if err := chromedp.Run(browserCtx,
		chromedp.ActionFunc(func(ctx context.Context) error {
			c := chromedp.FromContext(ctx)
			var err error
			proxy1, err = target.CreateBrowserContext().
				WithDisposeOnDetach(true).
				WithProxyServer("127.0.0.1:12999").
				Do(cdp.WithExecutor(ctx, c.Browser))
			if err != nil {
				return err
			}
			proxy2, err = target.CreateBrowserContext().
				WithDisposeOnDetach(true).
				WithProxyServer("127.0.0.1:13000").
				Do(cdp.WithExecutor(ctx, c.Browser))
			return err
		}),
	); err != nil {
		panic(err)
	}

	// Use proxy1:
	ctx1, cancel := chromedp.NewContext(browserCtx, chromedp.WithExistingBrowserContext(proxy1))
	defer cancel()
	if err := chromedp.Run(ctx1,
		chromedp.Navigate("http://ipinfo.io"),
	); err != nil {
		panic(err)
	}

	// Use proxy2:
	ctx2, cancel := chromedp.NewContext(browserCtx, chromedp.WithExistingBrowserContext(proxy2))
	defer cancel()
	if err := chromedp.Run(ctx2,
		chromedp.Navigate("http://google.com"),
	); err != nil {
		panic(err)
	}
}

With PR #1237

What did you expect to see?

1 browser with multiple tabs.

What did you see instead?

multiple browsers with 1 tab each.