我是靠谱客的博主 名字长了才好记,最近开发中收集的这篇文章主要介绍使用Chromium模拟登录获取cookie来登录并获取调试请求中的接口数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

要使用Chromium模拟登录并获取Cookie,然后进行抓取新浪微博接口的数据,通常我们可以通过以下方法:

  1. 使用chromedp:Go语言的chromedp包允许你使用无头浏览器(Headless Chrome/Chromium)进行模拟浏览器操作,包括模拟用户登录,获取页面的Cookie,并发送HTTP请求。

  2. 模拟用户操作:使用chromedp完成表单填写和提交,模拟用户登录新浪微博。

  3. 获取登录后的Cookie:登录成功后,从浏览器上下文中获取Cookie并使用它进行API请求。

使用chromedp模拟登录新浪微博并获取Cookie的步骤:

  1. 安装chromedp: 首先需要在你的Go项目中引入chromedp包,使用以下命令安装:

go get -u github.com/chromedp/chromedp


  1. 编写代码:下面是一个完整的示例代码,通过chromedp自动登录新浪微博,获取登录后的Cookie,然后进行API请求抓取数据。

package main

import (
	"context"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"
	"time"

	"github.com/chromedp/chromedp"
)

// 定义微博接口返回的结构体
type WeiboResponse struct {
	Data []struct {
		ID   string `json:"id"`
		Text string `json:"text"`
	} `json:"data"`
}

// 登录微博并获取cookie
func loginWeibo(username, password string) (string, error) {
	// 创建Chromium浏览器上下文
	ctx, cancel := chromedp.NewContext(context.Background())
	defer cancel()

	// 创建上下文执行超时控制
	ctx, cancel = context.WithTimeout(ctx, 60*time.Second)
	defer cancel()

	var cookies []string

	// 执行Chromium操作
	err := chromedp.Run(ctx,
		// 打开微博登录页面
		chromedp.Navigate(`https://weibo.com/login.php`),
		// 等待页面加载
		chromedp.WaitVisible(`#loginname`),
		// 填写用户名
		chromedp.SendKeys(`#loginname`, username),
		// 填写密码
		chromedp.SendKeys(`input[name="password"]`, password),
		// 点击登录按钮
		chromedp.Click(`.login_btn`),
		// 等待页面跳转完成
		chromedp.Sleep(5*time.Second),
		// 获取登录后的Cookie
		chromedp.Evaluate(`document.cookie`, &cookies),
	)

	if err != nil {
		return "", fmt.Errorf("登录失败: %v", err)
	}

	// 将Cookie拼接成HTTP头的格式
	return cookies[0], nil
}

// 使用Cookie请求抓取微博API数据
func fetchWeibo(uid string, page int, cookie string) (*WeiboResponse, error) {
	// 构建URL
	url := fmt.Sprintf("https://weibo.com/ajax/statuses/mymblog?uid=%s&page=%d&feature=0", uid, page)

	// 创建一个HTTP客户端,设置超时
	client := &http.Client{
		Timeout: 10 * time.Second,
	}

	// 创建HTTP请求
	req, err := http.NewRequest("GET", url, nil)
	if err != nil {
		return nil, err
	}

	// 模拟浏览器请求头
	req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
	req.Header.Set("Referer", "https://weibo.com/")
	req.Header.Set("Accept-Language", "zh-CN,zh;q=0.9")
	req.Header.Set("Cookie", cookie) // 设置获取到的Cookie

	// 发送请求
	resp, err := client.Do(req)
	if err != nil {
		return nil, err
	}
	defer resp.Body.Close()

	// 读取响应体
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		return nil, err
	}

	// 打印原始响应,便于调试
	// fmt.Println(string(body))

	// 解析JSON数据
	var weiboResp WeiboResponse
	if err := json.Unmarshal(body, &weiboResp); err != nil {
		return nil, err
	}

	return &weiboResp, nil
}

func main() {
	// 先通过Chromium模拟登录获取cookie
	username := "your_weibo_username"  // 替换为你的微博用户名
	password := "your_weibo_password"  // 替换为你的微博密码

	// 登录微博,获取Cookie
	cookie, err := loginWeibo(username, password)
	if err != nil {
		log.Fatalf("登录失败: %v", err)
	}
	fmt.Println("获取到的Cookie: ", cookie)

	uid := "7839005930" // 新浪微博用户ID
	page := 1           // 要抓取的页面

	// 使用获取到的Cookie抓取微博API数据
	weiboData, err := fetchWeibo(uid, page, cookie)
	if err != nil {
		log.Fatalf("抓取数据失败: %v", err)
	}

	// 打印抓取到的数据
	for _, post := range weiboData.Data {
		fmt.Printf("ID: %s, 内容: %sn", post.ID, post.Text)
	}
}

代码说明:

  1. loginWeibo函数

    • 该函数使用chromedp模拟登录新浪微博,填写用户名和密码后,模拟点击登录按钮并获取登录后的Cookie。

    • 这个Cookie将用于后续的接口请求。

  2. fetchWeibo函数

    • 在登录成功后,使用获取到的Cookie来请求新浪微博API。

    • 使用HTTP请求的头信息模拟正常的浏览器访问。

  3. chromedp.Run

    • chromedp允许你控制浏览器页面的各项操作,包括导航、填写表单、点击按钮等,适用于模拟用户行为。

  4. chromedp.Evaluate

    • 该方法用于获取登录成功后的页面Cookie,这些Cookie将被用于后续API请求。

使用说明:

  1. 用户名和密码:请替换代码中的your_weibo_usernameyour_weibo_password为你的微博用户名和密码。

  2. 安装依赖

    • 需要先安装Chromium浏览器,并确保环境中能够正常启动。

    • 如果需要非无头浏览器以便调试,使用chromedp.WithDebugf(log.Printf)来启用非无头模式。

  3. 代理问题

    • 如果需要使用代理,你可以配置chromedp.NewContext中的浏览器选项,或通过设置代理IP来规避反爬虫。

  4. 安全性

    • 请勿将用户名、密码等敏感信息硬编码在代码中,建议使用配置文件或环境变量来存储敏感信息。

注意事项:

新浪微博有可能针对自动化脚本采取更多的反爬措施。如果遇到登录失败,可能需要进一步优化模拟行为,例如处理验证码、滑动验证等复杂登录流程。如果遇到这些问题,可能需要使用其他工具或服务进行辅助。


最后

以上就是名字长了才好记为你收集整理的使用Chromium模拟登录获取cookie来登录并获取调试请求中的接口数据的全部内容,希望文章能够帮你解决使用Chromium模拟登录获取cookie来登录并获取调试请求中的接口数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(277)

评论列表共有 0 条评论

立即
投稿
返回
顶部