Как заблокировать CSS и запрос изображения в chromedp, как кукловод RequestInterception? - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь заблокировать CSS и запрос изображений в chromedp, но не могу найти нужную информацию или код об этом.если кто-нибудь знает, пожалуйста, сообщите мне некоторый ссылочный код.

в кукловоде, я использую приведенный ниже код для блокировки изображения и CSS.

await page.on('request', (req) => {
  if (
    req.resourceType() == 'stylesheet' || 
    req.resourceType() == 'font'       || 
    req.resourceType() == 'image'      ||  
    req.resourceType() == 'media'
  ) {
    req.abort();
  } else {
    req.continue();
  }
});

В соответствии с методом github ниже, я пытался, но не работал,https://github.com/chromedp/chromedp/issues/260

    package main

import (
    "context"
    "io/ioutil"
    "os"
    "time"

    "github.com/chromedp/cdproto/cdp"
    "github.com/chromedp/cdproto/fetch"
    "github.com/chromedp/cdproto/network"
    "github.com/chromedp/chromedp"
)

func main() {
    dir, err := ioutil.TempDir("", "chromedp-example")
    if err != nil {
        panic(err)
    }
    defer os.RemoveAll(dir)

    opts := append(chromedp.DefaultExecAllocatorOptions[:],
        chromedp.DisableGPU,
        chromedp.NoDefaultBrowserCheck,
        chromedp.Flag("headless", false),
        chromedp.Flag("ignore-certificate-errors", true),
        chromedp.UserDataDir(dir),
    )

    allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), opts...)
    defer cancel()

    // also set up a custom logger
    taskCtx, cancel := chromedp.NewContext(allocCtx)
    defer cancel()

    // create a timeout
    taskCtx, cancel = context.WithTimeout(taskCtx, 100*time.Second)
    defer cancel()

    // ensure that the browser process is started
    if err := chromedp.Run(taskCtx); err != nil {
        panic(err)
    }

    // listen network event

    chromedp.ListenTarget(taskCtx, DisableImageLoad(taskCtx))

    chromedp.Run(taskCtx,
        network.Enable(),
        fetch.Enable(),
        chromedp.Navigate(`http://www.yahoo.com`),
        chromedp.WaitVisible(`body`, chromedp.BySearch),
    )

}

func DisableImageLoad(ctx context.Context) func(event interface{}) {
    return func(event interface{}) {
        switch ev := event.(type) {
        case *fetch.EventRequestPaused:
            go func() {
                c := chromedp.FromContext(ctx)
                ctx := cdp.WithExecutor(ctx, c.Target)

                if ev.ResourceType == network.ResourceTypeImage {
                    fetch.FailRequest(ev.RequestID, network.ErrorReasonConnectionAborted).Do(ctx)
                } else {
                    fetch.ContinueRequest(ev.RequestID).Do(ctx)
                }
            }()
        }
    }
}
...