使用chromedp设置Cookie无效求助(编译运行无报错)
我尝试使用chromedp库打开结账页面,但页面无法接收我设置的Cookie。先后尝试了network.SetCookies()和循环调用network.SetCookie()两种方式,代码编译并运行无报错,但均不生效,恳请帮助。以下是我的代码:
opts := append(chromedp.DefaultExecAllocatorOptions[:], chromedp.Flag("headless", false)) actx, cancel := chromedp.NewExecAllocator(context.Background(), opts...) ctx, cancel := chromedp.NewContext(actx) // Call cancel() to close Chrome on some condition. if false { cancel() } task := chromedp.Tasks{ network.Enable(), chromedp.ActionFunc(func(ctx context.Context) error { cookieJar := getCookies(client) var cookiesParam []*network.CookieParam for _, v := range cookieJar { fmt.Println(v.Name, ":"+v.Value) cookiesParam = append(cookiesParam, &network.CookieParam{Name: v.Name, Value: v.Value}) } network.SetCookies(cookiesParam) return nil }), chromedp.Navigate(res.Request.URL.String()), } // Run task. err := chromedp.Run(ctx, task) if err != nil { log.Fatal(err) }
编辑补充:我尝试了@zachyoung提供的示例代码,但仍然无法成功设置任何Cookie,代码如下:
// Command cookie is a chromedp example demonstrating how to set a HTTP cookie // on requests. package main import ( "context" "log" "time" "github.com/chromedp/cdproto/cdp" "github.com/chromedp/cdproto/network" "github.com/chromedp/chromedp" ) func main() { // create context ctx, cancel := chromedp.NewContext(context.Background()) defer cancel() // run task list var res string err := chromedp.Run(ctx, setcookies("https://en.afew-store.com/", &res, "cookie1", "value1", "cookie2", "value2", )) if err != nil { log.Fatal(err) } log.Printf("chrome received cookies: %s", res) } // setcookies returns a task to navigate to a host with the passed cookies set // on the network request. func setcookies(host string, res *string, cookies ...string) chromedp.Tasks { if len(cookies)%2 != 0 { panic("length of cookies must be divisible by 2") } return chromedp.Tasks{ chromedp.ActionFunc(func(ctx context.Context) error { // create cookie expiration expr := cdp.TimeSinceEpoch(time.Now().Add(180 * 24 * time.Hour)) // add cookies to chrome for i := 0; i < len(cookies); i += 2 { err := network.SetCookie(cookies[i], cookies[i+1]). WithExpires(&expr). WithDomain("https://en.afew-store.com/"). WithHTTPOnly(true). Do(ctx) if err != nil { return err } } return nil }), // navigate to site chromedp.Navigate(host), // read the returned values chromedp.Text(`#result`, res, chromedp.ByID, chromedp.NodeVisible), // read network values chromedp.ActionFunc(func(ctx context.Context) error { cookies, err := network.GetAllCookies().Do(ctx) if err != nil { return err } for i, cookie := range cookies { log.Printf("chrome cookie %d: %+v", i, cookie) } return nil }), } }
内容的提问来源于stack exchange,提问作者TOMMASO26175
相关产品推荐
相关产品推荐

