(opts Options)
| 94 | } |
| 95 | |
| 96 | func 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 | } |
no test coverage detected