MCPcopy
hub / github.com/projectdiscovery/katana / New

Function New

pkg/engine/headless/crawler/crawler.go:96–155  ·  view source on GitHub ↗
(opts Options)

Source from the content-addressed store, hash-verified

94}
95
96func New(opts Options) (*Crawler, error) {
97 if initError != nil {
98 return nil, initError
99 }
100
101 if opts.Logger == nil {
102 opts.Logger = slog.Default()
103 }
104
105 launcher, err := browser.NewLauncher(browser.LauncherOptions{
106 ChromiumPath: opts.ChromiumPath,
107 MaxBrowsers: opts.MaxBrowsers,
108 PageMaxTimeout: opts.PageMaxTimeout,
109 ShowBrowser: opts.ShowBrowser,
110 RequestCallback: opts.RequestCallback,
111 SlowMotion: opts.SlowMotion,
112 ScopeValidator: opts.ScopeValidator,
113 ChromeUser: opts.ChromeUser,
114 Trace: opts.Trace,
115 CookieConsentBypass: opts.CookieConsentBypass,
116 NoSandbox: opts.NoSandbox,
117 NoIncognito: opts.NoIncognito,
118 PageLoadStrategy: opts.PageLoadStrategy,
119 ChromeWSUrl: opts.ChromeWSUrl,
120 DOMWaitTime: opts.DOMWaitTime,
121 UserDataDir: opts.UserDataDir,
122 Proxy: opts.Proxy,
123 UserArguments: opts.UserArguments,
124 })
125 if err != nil {
126 return nil, err
127 }
128
129 var diagnosticsWriter diagnostics.Writer
130 if opts.EnableDiagnostics {
131 directory := opts.DiagnosticsDir
132 if directory == "" {
133 cwd, _ := os.Getwd()
134 directory = filepath.Join(cwd, fmt.Sprintf("katana-diagnostics-%s", time.Now().Format(time.RFC3339)))
135 }
136
137 writer, err := diagnostics.NewWriter(directory)
138 if err != nil {
139 return nil, err
140 }
141 diagnosticsWriter = writer
142 opts.DiagnosticsDir = directory
143 opts.Logger.Info("Diagnostics enabled", slog.String("directory", directory))
144 }
145
146 crawler := &Crawler{
147 launcher: launcher,
148 options: opts,
149 logger: opts.Logger,
150 uniqueActions: make(map[string]struct{}),
151 diagnostics: diagnosticsWriter,
152 simhashOracle: simhash.NewOracle(),
153 }

Callers 1

CrawlMethod · 0.92

Calls 4

NewLauncherFunction · 0.92
NewWriterFunction · 0.92
NewOracleFunction · 0.92
StringMethod · 0.45

Tested by

no test coverage detected