1

How to open tab in new window of the same browser? Some web applications do not work in an inactive tab.

In the example, several windows open, but only the first window is available for management. When creating the rest, an error occurs

chrome failed to start: A window or tab will open in the current browser session.

package main

import (
    "context"
    "log"
    "time"

    "github.com/chromedp/chromedp"
)

func main() {
    userDir := "someUserDir"

    opts := append(chromedp.DefaultExecAllocatorOptions[:],
        chromedp.DisableGPU,
        chromedp.UserDataDir(userDir),
        chromedp.WindowSize(1368, 768),
        chromedp.Flag("headless", false),
        chromedp.Flag("enable-automation", false),
        chromedp.Flag("restore-on-startup", false),
        chromedp.Flag("new-window", true),
    )

    for i := 0; i < 5; i++ {
        log.Printf("open window %d", i)
        allocCtx, _ := chromedp.NewExecAllocator(context.Background(), opts...)
        ctx, _ := chromedp.NewContext(allocCtx)

        if err := chromedp.Run(ctx, chromedp.Navigate("https://example.com")); err != nil {
            log.Println(err)
        }
    }

    time.Sleep(time.Minute)
}
semen
  • 21
  • 1
  • 4
  • Could you please try adding what are the approaches you tried so far, a small snippet can also help others to answer you better. – Sunil Lulla Feb 23 '20 at 08:22
  • I do not know how to open a new window. How to open a new tab can be seen here. https://github.com/chromedp/chromedp/blob/896fbe60c209c643ac02d6cb757793d81dac3488/example_test.go#L80 – semen Feb 23 '20 at 08:38

1 Answers1

1
package main

import (
    "context"
    "log"
    "time"

    "github.com/chromedp/cdproto/runtime"
    "github.com/chromedp/chromedp"
)

func main() {
    opts := append(chromedp.DefaultExecAllocatorOptions[:],
        chromedp.DisableGPU,
        chromedp.UserDataDir("someUserDir"),
        chromedp.Flag("headless", false),
        chromedp.Flag("enable-automation", false),
        chromedp.Flag("restore-on-startup", false),
    )
    allocCtx, _ := chromedp.NewExecAllocator(context.Background(), opts...)

    ctx, _ := chromedp.NewContext(allocCtx)
    if err := chromedp.Run(ctx, chromedp.Navigate("about:blank")); err != nil {
        log.Fatalln(err)
    }

    for i := 0; i < 5; i++ {
        var res *runtime.RemoteObject
        if err := chromedp.Run(ctx, chromedp.Evaluate(`window.open("about:blank", "", "resizable,scrollbars,status")`, &res)); err != nil {
            log.Fatalln(err)
        }
        targets, err := chromedp.Targets(ctx)
        if err != nil {
            log.Fatalln(err)
        }
        for _, t := range targets {
            if !t.Attached {
                newCtx, _ := chromedp.NewContext(ctx, chromedp.WithTargetID(t.TargetID))
                if err := chromedp.Run(newCtx, chromedp.Navigate("https://example.com")); err != nil {
                    log.Fatalln(err)
                }
            }
        }
    }

    time.Sleep(time.Minute)
}
semen
  • 21
  • 1
  • 4