Skip to content

Commit bcb3752

Browse files
committed
fix: Chrome detection on Windows, verbose Tier 3 logging
- Add native Windows paths (C:\Program Files\...) for Chrome, Edge, Brave - Support CHROME_PATH env var for custom Chrome location - Replace MustLaunch() with Launch() to return error instead of panic - Add verbose logging at every Tier 3 step: found, launch, connect, page, HTML, CAPTCHA - Remove stale log.Println import
1 parent 0183e6a commit bcb3752

1 file changed

Lines changed: 31 additions & 5 deletions

File tree

fetch.go

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"context"
55
"fmt"
66
"io"
7-
"log"
87
"net"
98
"net/http"
109
"net/http/cookiejar"
@@ -333,36 +332,49 @@ func fetchTier2(rawURL string, opts *fetchOptions) (*fetchResult, error) {
333332
func fetchTier3(rawURL string, opts *fetchOptions) (*fetchResult, error) {
334333
chromePath := findChrome()
335334
if chromePath == "" {
336-
log.Println("fetchTier3: Chrome not found")
335+
logVerbose(opts, "[tier3] Chrome not found at any known path")
337336
return nil, &httpError{statusCode: 0, message: "Chrome not installed"}
338337
}
339338

340-
controlURL := launcher.New().Bin(chromePath).Headless(true).MustLaunch()
339+
logVerbose(opts, "[tier3] %s → using Chrome at %s", rawURL, chromePath)
340+
341+
l := launcher.New().Bin(chromePath).Headless(true)
342+
controlURL, err := l.Launch()
343+
if err != nil {
344+
logVerbose(opts, "[tier3] %s → Chrome launch failed: %v", rawURL, err)
345+
return nil, fmt.Errorf("chrome launch: %w", err)
346+
}
347+
341348
browser := rod.New().ControlURL(controlURL)
342349
if err := browser.Connect(); err != nil {
350+
logVerbose(opts, "[tier3] %s → browser connect failed: %v", rawURL, err)
343351
return nil, fmt.Errorf("browser connect: %w", err)
344352
}
345353
defer browser.Close()
346354

347355
page, err := browser.Page(proto.TargetCreateTarget{URL: rawURL})
348356
if err != nil {
357+
logVerbose(opts, "[tier3] %s → page open failed: %v", rawURL, err)
349358
return nil, fmt.Errorf("browser open page: %w", err)
350359
}
351360

352361
if err := page.WaitStable(1 * time.Second); err != nil {
353-
return nil, fmt.Errorf("page wait stable: %w", err)
362+
logVerbose(opts, "[tier3] %s → page did not stabilize: %v", rawURL, err)
354363
}
355364
page.MustWaitLoad()
356365

357366
html, err := page.HTML()
358367
if err != nil {
368+
logVerbose(opts, "[tier3] %s → failed to get HTML: %v", rawURL, err)
359369
return nil, fmt.Errorf("page html: %w", err)
360370
}
361371

362372
if isCaptchaPage(html) {
373+
logVerbose(opts, "[tier3] %s → CAPTCHA detected", rawURL)
363374
return nil, &httpError{statusCode: 0, message: "site requires interactive challenge (CAPTCHA)"}
364375
}
365376

377+
logVerbose(opts, "[tier3] %s → 200 (headless Chrome, %d bytes)", rawURL, len(html))
366378
return &fetchResult{html: html, tier: 3, url: rawURL}, nil
367379
}
368380

@@ -379,10 +391,24 @@ func findChrome() string {
379391
"/Applications/Chromium.app/Contents/MacOS/Chromium",
380392
"/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge",
381393
"/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
382-
// Windows (via WSL or native)
394+
// Windows (native)
395+
`C:\Program Files\Google\Chrome\Application\chrome.exe`,
396+
`C:\Program Files (x86)\Google\Chrome\Application\chrome.exe`,
397+
`C:\Program Files\Microsoft\Edge\Application\msedge.exe`,
398+
`C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe`,
399+
`C:\Program Files\BraveSoftware\Brave-Browser\Application\brave.exe`,
400+
// Windows (via WSL)
383401
"/mnt/c/Program Files/Google/Chrome/Application/chrome.exe",
384402
"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",
385403
}
404+
405+
// Also check CHROME_PATH env var (user override)
406+
if envPath := os.Getenv("CHROME_PATH"); envPath != "" {
407+
if fileExists(envPath) {
408+
return envPath
409+
}
410+
}
411+
386412
for _, p := range paths {
387413
if fileExists(p) {
388414
return p

0 commit comments

Comments
 (0)