沙滩星空的博客沙滩星空的博客

使用chromedp获取登录网站的cookie

浏览器JS控制台获取

直接输入 document.cookie 来查看 cookie:

>  document.cookie
<. 'c01b67f4002fc81ca5b5015821bdab73__typecho_uid=1; c01b67f4002fc81ca5b5015821bdab73__typecho_authCode=%24T%24RCFvoIeVQ2212a46302f9d907b55dd835a3e728b3; PHPSESSID=4dl7shuot7gi8bisleplhgr3gj; c01b67f4002fc81ca5b5015821bdab73extend_contents_views=188%2C184%2C256%2C261%2C226%2C220%2C218%2C217%2C202%2C186'

注: 此方法只能获取非 HttpOnly 类型的 cookie。

chromedp浏览器爬虫获取

使用远程调试模式启动浏览器

启动脚本示例: chromestart.sh

#!/bin/bash

# 无界面模式启动
"/opt/google/chrome/google-chrome" --headless --no-sandbox --disable-gpu --log-level=1 --remote-debugging-port=9222 --disable-popup-blocking --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36" --proxy-server=http://127.0.0.1:1080 --user-data-dir=runtime/chrome_user_data
  • 无界面模式: --headless --no-sandbox --disable-gpu 三个参数可开启无界面模式,在linux后台静默运行
  • 远程调试端口: --remote-debugging-port=9222 使浏览器允许被远程控制暴露的端口号
  • UA请求头: --user-agent 浏览器请求头的用户代理标识,防止被反爬虫
  • 代理上网设置: --proxy-server 访问谷歌等国内无法访问的网站,需要设置代理上网
  • 浏览器用户数据目录: --user-data-dir 脚本启动浏览器以一个新用户的方式启动,必须设置一个用户数据目录

注: 开发调试时,请关闭无界面模式,方便肉眼实时观察浏览器允许状况。

chromedp获取cookie

下载 chromedp 第三方库: go get github.com/chromedp/chromedp

演示代码: main.go

package main

import (
    "context"
    "log"

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

func main() {
    ctx, cancel := chromedp.NewRemoteAllocator(context.Background(), "ws://127.0.0.1:9222")
    defer cancel()

    c, cancel1 := chromedp.NewContext(ctx)
    defer cancel1()

    err := chromedp.Run(c,
        chromedp.Navigate("https://helloword.com"),
        chromedp.WaitVisible(`//xpath`, chromedp.BySearch),
        chromedp.ActionFunc(func(ctx context.Context) error {
            // 获取cookie
            cookies, err := network.GetAllCookies().Do(ctx)
            // 将cookie拼接成header请求中cookie字段的模式
            var c string
            for _, v := range cookies {
                c = c + v.Name + "=" + v.Value + ";"
            }
            log.Println(c)
            if err != nil {
                return err
            }
            return nil
        }))
    if err != nil {
        log.Fatal(err)
    }
}

使用chromedp解决反爬虫问题 https://juejin.cn/post/6844903576943198222
如何用 JS 操作 Cookie? https://zhuanlan.zhihu.com/p/509830488
Instantly share code, notes, and snippets. https://gist.github.com/NaniteFactory/b47038047597c387ef6d16a79ee12489
https://github.com/chromedp/examples/blob/master/cookie/main.go

未经允许不得转载:沙滩星空的博客 » 使用chromedp获取登录网站的cookie

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址