fish2018/pansou · error
重试后仍然进入机器人验证页
Error message
重试后仍然进入机器人验证页
What it means
In requestWithChallengeRetry, on the second attempt (attempt==1) the response body is still a bot-challenge page, meaning the solve-and-retry cycle already ran once and failed. The library gives up rather than looping indefinitely.
Solutions
- Ensure solveBotChallenge runs on the same scraper so verification cookies carry into the retry.
- Check solveBotChallenge's own returned error from the previous attempt for details.
- Rotate proxy/IP — persistent challenges usually mean the IP is flagged.
- Update cloudscraper if the site deployed a newer challenge type.
Defensive patterns
Strategy: retry
Try / catch
if err != nil { if strings.Contains(err.Error(), "重试后仍然进入机器人验证页") { rotateProxy(); sleepLong(); retryWithFreshSession() } } Prevention
- Verify challenge cookies persist between attempts
- Check solveBotChallenge errors from the first attempt
- Rotate IP after one failed solve+retry cycle
- Keep the solver library current
When it happens
Trigger: First request returned a challenge, solveBotChallenge+retry was executed, and the retried response again passes isBotChallengePage(body) on attempt 2 (attempt==1, zero-based).
Common situations: Challenge solution rejected repeatedly (blocked IP, unsolvable/new challenge type, cookies not persisted between attempts).
Related errors
AI-assisted analysis of fish2018/pansou@beaa561337 (2026-09-07).
Data as JSON: /api/errors/e094d38445d2902b.
Report an issue: GitHub.
Appendix: source
Thrown at plugin/gying/gying.go:1940
return nil, 0, nil, err
}
statusCode := resp.StatusCode
headers := resp.Header.Clone()
body, readErr := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if readErr != nil {
return nil, statusCode, headers, readErr
}
if DebugLog {
fmt.Printf("[Gying] requestWithChallengeRetry: method=%s attempt=%d status=%d url=%s bodyLen=%d challenge=%v loginShell=%v\n",
method, attempt+1, statusCode, requestURL, len(body), isBotChallengePage(body), isLoginShell(body))
}
if isBotChallengePage(body) {
if attempt == 1 {
return nil, statusCode, headers, fmt.Errorf("重试后仍然进入机器人验证页")
}
if DebugLog {
fmt.Printf("[Gying] requestWithChallengeRetry: 准备求解challenge并重试 url=%s\n", requestURL)
}
if err := p.solveBotChallenge(scraper, requestURL, body); err != nil {
return nil, statusCode, headers, err
}
if DebugLog {
fmt.Printf("[Gying] requestWithChallengeRetry: challenge已完成,重试原请求 url=%s\n", requestURL)
}
continue
}
return body, statusCode, headers, nil
}
return nil, 0, nil, fmt.Errorf("请求重试次数已耗尽")
}View on GitHub (pinned to beaa561337)