Golang无头浏览器获取Cookie

“在Golang中使用无头浏览器获取Cookie时遇到问题,我用chromedp库实现,但获取的Cookie总是为空或者不完整。请问正确的实现方式是什么?需要特别处理哪些参数才能确保获取到完整的会话Cookie?另外,如果目标网站有反爬机制,该如何绕过检测?希望能提供一个完整的示例代码。”

2 回复

使用Golang无头浏览器获取Cookie,推荐使用chromedp库。示例代码:

package main

import (
    "context"
    "log"
    "time"
    "github.com/chromedp/chromedp"
)

func main() {
    ctx, cancel := chromedp.NewContext(context.Background())
    defer cancel()
    
    var cookies string
    err := chromedp.Run(ctx,
        chromedp.Navigate("https://example.com"),
        chromedp.WaitVisible("body"),
        chromedp.ActionFunc(func(ctx context.Context) error {
            cks, err := chromedp.CookiesFromContext(ctx)
            // 处理cookies
            return err
        }),
    )
    if err != nil {
        log.Fatal(err)
    }
}

需要先安装chromedp:go get -u github.com/chromedp/chromedp

更多关于Golang无头浏览器获取Cookie的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中,可以使用chromedp库配合无头Chrome浏览器来获取Cookie。以下是具体实现步骤和代码示例:

安装依赖

go get -u github.com/chromedp/chromedp

示例代码

package main

import (
	"context"
	"fmt"
	"log"
	"time"

	"github.com/chromedp/chromedp"
)

func main() {
	// 创建上下文
	ctx, cancel := chromedp.NewContext(context.Background())
	defer cancel()

	// 设置超时
	ctx, cancel = context.WithTimeout(ctx, 30*time.Second)
	defer cancel()

	var cookies []map[string]interface{}

	// 执行任务
	err := chromedp.Run(ctx,
		// 导航到目标网站
		chromedp.Navigate("https://example.com"),
		
		// 等待页面加载
		chromedp.Sleep(2*time.Second),
		
		// 获取所有Cookie
		chromedp.ActionFunc(func(ctx context.Context) error {
			c, err := chromedp.GetCookies().Do(ctx)
			if err != nil {
				return err
			}
			for _, cookie := range c {
				cookies = append(cookies, map[string]interface{}{
					"name":  cookie.Name,
					"value": cookie.Value,
					"domain": cookie.Domain,
				})
			}
			return nil
		}),
	)

	if err != nil {
		log.Fatal(err)
	}

	// 输出Cookie信息
	for _, cookie := range cookies {
		fmt.Printf("Name: %s, Value: %s, Domain: %s\n", 
			cookie["name"], cookie["value"], cookie["domain"])
	}
}

关键说明:

  1. chromedp.NewContext:创建浏览器上下文
  2. chromedp.Navigate:导航到目标网页
  3. chromedp.GetCookies:获取当前页面的所有Cookie
  4. 可以通过chromedp.WaitVisible等操作等待特定元素加载后再获取Cookie

注意事项:

  • 需要安装Chrome/Chromium浏览器
  • 可配置代理、用户代理等参数
  • 支持设置Cookie过滤条件
  • 建议添加适当的等待时间确保页面完全加载

这种方法适用于网页自动化测试、爬虫开发等需要处理Cookie的场景。

回到顶部