camoufoxnative

package
v0.3.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 5, 2026 License: MIT Imports: 42 Imported by: 0

Documentation

Index

Constants

View Source
const AvailableRegionsURL = "https://aistudio.google.com/docs/available-regions"

AvailableRegionsURL 是官网在地区或账户不受支持时跳转的页面

Variables

View Source
var ErrAuthenticationRequired = errors.New("隔离登录态失效")

ErrAuthenticationRequired 表示隔离账户需要恢复登录

View Source
var ErrNoDisplay = errors.New("当前环境没有图形界面,无法打开 Camoufox 登录窗口:启动服务后在管理页面“添加账户”中选择“浏览器登录”,登录窗口显示在管理页面中")

ErrNoDisplay 表示本机没有图形界面,无法打开可见的登录窗口

View Source
var ErrProxyUnreachable = errors.New("代理不可达")

ErrProxyUnreachable 表示 Worker 载入 AI Studio 期间无法连接代理

View Source
var ErrRegionNotSupported = errors.New("AI Studio 不支持当前出口地区或账户,为该账户或全局代理换用支持地区的出口")

ErrRegionNotSupported 表示 AI Studio 不支持当前出口地区或账户

Functions

func AccountFingerprint added in v0.2.0

func AccountFingerprint(options Options) (map[string]any, error)

AccountFingerprint 返回账户固定 Camoufox 指纹配置,不存在时按当前版本生成并保存

func FindExecutable

func FindExecutable(ctx context.Context, proxy string) (string, error)

FindExecutable 定位与 camoufoxRelease 同版本的 Camoufox,都没有时经 proxy 下载,proxy 为空时直连

func GeneratePrompt added in v0.3.0

func GeneratePrompt(body []byte) (string, bool)

GeneratePrompt 返回 GenerateContent 正文最后一个轮次的文本,即官网用户在输入框中输入的提示词;最后一个轮次不是带文本的 user 轮次时返回 false

func HasDisplay added in v0.2.14

func HasDisplay() bool

HasDisplay 判断本机能否显示可见的浏览器窗口,Linux 上需要 DISPLAY 或 WAYLAND_DISPLAY

func Installed added in v0.2.17

func Installed() bool

Installed 表示本机已有与 camoufoxRelease 同版本的 Camoufox,不触发下载

func PersistAccountFingerprint

func PersistAccountFingerprint(sourceDirectory string, targetDirectory string) error

PersistAccountFingerprint 将隔离登录指纹保存到账户目录

func RemoveStaleProfiles added in v0.1.7

func RemoveStaleProfiles() (int, error)

RemoveStaleProfiles 结束仍在使用创建进程已退出的临时 profile 的进程树,再删除这些 profile 并返回删除数量

Types

type Download added in v0.2.17

type Download struct {
	Received int64 `json:"received"`
	Total    int64 `json:"total"`
}

Download 是正在进行的 Camoufox 下载的已收与总字节,总字节未知时为 0

func DownloadProgress added in v0.2.17

func DownloadProgress() (Download, bool)

DownloadProgress 返回正在进行的 Camoufox 下载,没有下载时 ok 为 false

type GenerateTurn added in v0.3.0

type GenerateTurn struct {
	Body       []byte
	ProofStart int
	ProofEnd   int
	Digest     string
}

GenerateTurn 是在页面界面运行的一轮 GenerateContent:Body 第 ProofStart 到 ProofEnd 字节是 proof 字段,发送时换成页面应用为 Digest 取得的 proof;Digest 为 binding 的 SHA-256 十六进制

type LiveView added in v0.2.14

type LiveView struct {
	// contains filtered or unexported fields
}

LiveView 把无头隔离登录浏览器的画面推给管理页登录窗口,并把窗口中的输入转发给浏览器

func NewLiveView added in v0.2.14

func NewLiveView() *LiveView

NewLiveView 创建尚未连接登录浏览器与登录窗口的 LiveView

func (*LiveView) Serve added in v0.2.14

func (view *LiveView) Serve(ctx context.Context, connection *websocket.Conn) error

Serve 把登录阶段、画面与页面对话框推给登录窗口连接并接收其输入,后连接的窗口替换先前的窗口;连接断开或 ctx 结束时关闭连接并返回

type LoginOptions

type LoginOptions struct {
	ExecutablePath string
	Directory      string
	Locale         string
	Timezone       string
	Proxy          string
	ProxyBypass    string
	Timeout        time.Duration
	Log            io.Writer
	View           *LiveView
}

LoginOptions 定义纯 Go 隔离登录环境,View 不为空时浏览器以无头方式运行,画面与输入经管理页登录窗口传递

type LoginResult

type LoginResult struct {
	StorageStateJSON []byte
	Email            string
	PageURL          string
	VerifiedAt       time.Time
	DriveError       string
	CloseError       string
}

LoginResult 返回隔离浏览器导出的 Playwright storage state

func Login

func Login(ctx context.Context, options LoginOptions) (result LoginResult, err error)

Login 启动隔离 Camoufox 供用户登录 Google,并在 AI Studio 可用后导出认证状态

type Options

type Options struct {
	ExecutablePath   string
	StorageStatePath string
	Model            string
	Locale           string
	Timezone         string
	Proxy            string
	ProxyBypass      string
	Headless         bool
	AuthUser         int
	CacheDirectory   string
	ReadyTimeout     time.Duration
	Log              io.Writer
	StartupProgress  func(StartupStage)
	// contains filtered or unexported fields
}

Options 定义单个 AI Studio 账户的原生 Camoufox runtime

type PageCatalog added in v0.3.0

type PageCatalog struct {
	Logging []byte
	Tier    []byte
	Models  []byte
}

PageCatalog 是会话页面载入时 GetLoggingContext、GetAiStudioBenefitTier 与 ListModels 的响应正文

type ProtectedResponse

type ProtectedResponse struct {
	StatusCode int
	Header     http.Header
	Body       io.ReadCloser
}

ProtectedResponse 表示由固定指纹浏览器流式返回的 MakerSuite 响应

type StartupStage

type StartupStage string

StartupStage 表示 Camoufox runtime 的启动阶段

const (
	// StartupPreparingBrowser 表示正在准备浏览器配置
	StartupPreparingBrowser StartupStage = "preparing_browser"
	// StartupLaunchingBrowser 表示正在启动浏览器进程
	StartupLaunchingBrowser StartupStage = "launching_browser"
	// StartupConnectingBiDi 表示正在连接 WebDriver BiDi
	StartupConnectingBiDi StartupStage = "connecting_bidi"
	// StartupLoadingAIStudio 表示正在载入 AI Studio 页面
	StartupLoadingAIStudio StartupStage = "loading_ai_studio"
	// StartupLocatingWAA 表示正在定位 WAA 服务
	StartupLocatingWAA StartupStage = "locating_waa"
	// StartupBootstrappingWAA 表示正在执行 WAA Bootstrap
	StartupBootstrappingWAA StartupStage = "bootstrapping_waa"
)

type State

type State struct {
	PID         int
	PageURL     string
	UserAgent   string
	SnapshotKey string
	Headers     http.Header
}

State 返回原生 runtime 的当前页面与 bootstrap 结果

type Worker

type Worker struct {
	// contains filtered or unexported fields
}

Worker 保存单个账户的长驻 Camoufox 与 WAA service

func Start

func Start(ctx context.Context, options Options) (*Worker, error)

Start 启动隔离 Camoufox 并完成一次官网 WAA bootstrap

func (*Worker) Close

func (worker *Worker) Close() error

Close 结束 BiDi session 并清理 Camoufox profile

func (*Worker) Generate added in v0.3.0

func (worker *Worker) Generate(ctx context.Context, turn GenerateTurn) (*ProtectedResponse, error)

Generate 像官网用户一样在标签页界面运行一轮 GenerateContent:按标签页上一轮的对话决定继续、Rerun 或先开新对话,输入框没有焦点时以可信指针点击输入框,写入最后一个 user 轮次的文本后点击 Run,页面应用自己取 proof、构造请求头并发出请求,发送时正文换成 turn 的正文;一轮成功完成后在后台新开对话;全部标签页都在运行对话时在新标签页中载入官网页面

func (*Worker) PageCatalog added in v0.3.0

func (worker *Worker) PageCatalog() PageCatalog

PageCatalog 返回当前页面载入时 GetLoggingContext、GetAiStudioBenefitTier 与 ListModels 的响应正文

func (*Worker) Proof

func (worker *Worker) Proof(ctx context.Context, digest string, prompt string) (string, error)

Proof 在一次页面调用中写入官网 prompt 并为 SHA-256 digest 生成 fresh WAA proof,页面值未同步时最多重试 5 秒

func (*Worker) ProtocolHeaders

func (worker *Worker) ProtocolHeaders(ctx context.Context) (http.Header, error)

ProtocolHeaders 返回官网为 GenerateContent 构造的六个公共头

func (*Worker) Reload added in v0.3.0

func (worker *Worker) Reload(ctx context.Context) error

Reload 像官网用户一样在当前标签页中按官网冷启动重新载入页面;当前标签页有进行中的请求时改在新标签页中载入并切换过去,原标签页在其中的请求结束后关闭

func (*Worker) SendProtected

func (worker *Worker) SendProtected(ctx context.Context, rawURL string, headers http.Header, body []byte) (*ProtectedResponse, error)

SendProtected 通过固定指纹 Camoufox 页面发送请求,保留原生 TLS、HTTP/2、请求头、Cookie 和页面指纹;请求头带 Priority: u=0 时在一次 Pause 按键的处理中发出

func (*Worker) State

func (worker *Worker) State() State

State 返回 runtime 的不可变状态副本

func (*Worker) StorageCookies

func (worker *Worker) StorageCookies(ctx context.Context) ([]byte, error)

StorageCookies 导出当前固定指纹浏览器 Cookie,启动时写入的 Cookie 保持写入顺序,之后出现的 Cookie 排在其后

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL