browser

package
v0.0.0-...-b6b1527 Latest Latest
Warning

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

Go to latest
Published: Apr 24, 2026 License: GPL-3.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var AccessDeniedSelectors = []string{
	"div.cf-error-title span.cf-code-label span",
	"#cf-error-details div.cf-error-overview h1",
}
View Source
var AccessDeniedTitles = []string{
	"Access denied",
	"Attention Required! | Cloudflare",
}
View Source
var BlockedURLs = []string{
	"*.png", "*.jpg", "*.jpeg", "*.gif", "*.webp", "*.bmp", "*.svg", "*.ico",
	"*.PNG", "*.JPG", "*.JPEG", "*.GIF", "*.WEBP", "*.BMP", "*.SVG", "*.ICO",
	"*.tiff", "*.tif", "*.jpe", "*.apng", "*.avif", "*.heic", "*.heif",
	"*.TIFF", "*.TIF", "*.JPE", "*.APNG", "*.AVIF", "*.HEIC", "*.HEIF",
	"*.css", "*.CSS",
	"*.woff", "*.woff2", "*.ttf", "*.otf", "*.eot",
	"*.WOFF", "*.WOFF2", "*.TTF", "*.OTF", "*.EOT",
}
View Source
var ChallengeSelectors = []string{
	"#cf-challenge-running",
	".ray_id",
	".attack-box",
	"#cf-please-wait",
	"#challenge-spinner",
	"#trk_jschal_js",
	"#turnstile-wrapper",
	".lds-ring",
	"td.info #js_info",
	"div.vc div.text-box h2",
}
View Source
var ChallengeTitles = []string{
	"Just a moment...",
	"DDoS-Guard",
}
View Source
var TurnstileSelectors = []string{
	"input[name='cf-turnstile-response']",
}

Functions

func AppendWithEnv

func AppendWithEnv(env []string, key, value string) []string

func BuildPostFormHTML

func BuildPostFormHTML(targetURL, postData string) string

func ChromeArgValue

func ChromeArgValue(raw, name string) string

func CreateTransientDir

func CreateTransientDir(prefix string) (string, error)

func FirstCookiePath

func FirstCookiePath(path string) string

func IsChallengeIframeTarget

func IsChallengeIframeTarget(target ClickTarget) bool

func IsVerifyButtonTarget

func IsVerifyButtonTarget(target ClickTarget) bool

func NormalizeBlockedPattern

func NormalizeBlockedPattern(pattern string) string

func NormalizeResponseHeaders

func NormalizeResponseHeaders(headers map[string]any) map[string]string

func ScrubUserAgent

func ScrubUserAgent(value string) string

func SleepContext

func SleepContext(ctx context.Context, d time.Duration) error

func StartXvfb

func StartXvfb(xvfbPath string) (*exec.Cmd, string, error)

func SummarizeCandidateTargets

func SummarizeCandidateTargets(targets []ClickTarget) []string

func SummarizeClickTarget

func SummarizeClickTarget(target ClickTarget) string

func URLsEquivalent

func URLsEquivalent(lhs, rhs string) bool

Types

type ChallengeResolutionResult

type ChallengeResolutionResult struct {
	URL            string            `json:"url,omitempty"`
	Status         int               `json:"status,omitempty"`
	Headers        map[string]string `json:"headers,omitempty"`
	Response       string            `json:"response,omitempty"`
	Cookies        []Cookie          `json:"cookies,omitempty"`
	UserAgent      string            `json:"userAgent,omitempty"`
	Screenshot     string            `json:"screenshot,omitempty"`
	TurnstileToken string            `json:"turnstile_token,omitempty"`
}

type ClickTarget

type ClickTarget struct {
	Kind      string  `json:"kind"`
	Tag       string  `json:"tag"`
	Type      string  `json:"type"`
	Text      string  `json:"text"`
	ID        string  `json:"id"`
	Name      string  `json:"name"`
	Title     string  `json:"title"`
	AriaLabel string  `json:"ariaLabel"`
	Role      string  `json:"role"`
	ClassName string  `json:"className"`
	TabIndex  int64   `json:"tabIndex"`
	Disabled  bool    `json:"disabled"`
	Src       string  `json:"src"`
	Left      float64 `json:"left"`
	Top       float64 `json:"top"`
	Width     float64 `json:"width"`
	Height    float64 `json:"height"`
	Visible   bool    `json:"visible"`
}

func FallbackChallengeTargets

func FallbackChallengeTargets(targets []ClickTarget) []ClickTarget

func RelevantChallengeTargets

func RelevantChallengeTargets(targets []ClickTarget) []ClickTarget

func TabbableTargets

func TabbableTargets(targets []ClickTarget) []ClickTarget

type Client

type Client interface {
	UserAgent(context.Context) (string, error)
	Resolve(context.Context, Request) (*Result, error)
	Close() error
}

type Config

type Config struct {
	BrowserPath         string
	DriverPath          string
	Headless            bool
	StartupUserAgent    string
	LogHTML             bool
	DebugLogging        bool
	DisableMedia        bool
	DriverCacheDir      string
	DriverAutoDownload  bool
	ChromeForTestingURL string
	Logger              *slog.Logger
}
type Cookie struct {
	Name     string  `json:"name"`
	Value    string  `json:"value"`
	Domain   string  `json:"domain,omitempty"`
	Path     string  `json:"path,omitempty"`
	Expires  float64 `json:"expires,omitempty"`
	Size     int64   `json:"size,omitempty"`
	HTTPOnly bool    `json:"httpOnly,omitempty"`
	Secure   bool    `json:"secure,omitempty"`
	Session  bool    `json:"session,omitempty"`
	SameSite string  `json:"sameSite,omitempty"`
}

type DocumentResponse

type DocumentResponse struct {
	URL     string
	Status  int
	Headers map[string]string
}

type Logger

type Logger interface {
	Debug(msg string, args ...any)
	Info(msg string, args ...any)
	Warn(msg string, args ...any)
	Error(msg string, args ...any)
}

type Point

type Point struct {
	X float64
	Y float64
}

func ClickPointsForTarget

func ClickPointsForTarget(target ClickTarget) []Point

type Proxy

type Proxy struct {
	URL      string `json:"url,omitempty"`
	Username string `json:"username,omitempty"`
	Password string `json:"password,omitempty"`
}

type Request

type Request struct {
	URL               string   `json:"url,omitempty"`
	Method            string   `json:"method,omitempty"`
	PostData          string   `json:"postData,omitempty"`
	Cookies           []Cookie `json:"cookies,omitempty"`
	MaxTimeoutMS      int      `json:"maxTimeoutMs,omitempty"`
	ReturnOnlyCookies bool     `json:"returnOnlyCookies,omitempty"`
	ReturnScreenshot  bool     `json:"returnScreenshot,omitempty"`
	WaitInSeconds     int      `json:"waitInSeconds,omitempty"`
	DisableMedia      bool     `json:"disableMedia,omitempty"`
	TabsTillVerify    *int     `json:"tabsTillVerify,omitempty"`
	LogHTML           bool     `json:"logHtml,omitempty"`
}

type Result

type Result struct {
	Result  *ChallengeResolutionResult
	Message string
}

Directories

Path Synopsis
Package geckodriverbackend implements the browser.Client interface on top of geckodriver + Firefox (typically daijro/camoufox).
Package geckodriverbackend implements the browser.Client interface on top of geckodriver + Firefox (typically daijro/camoufox).

Jump to

Keyboard shortcuts

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