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

  1. Ensure solveBotChallenge runs on the same scraper so verification cookies carry into the retry.
  2. Check solveBotChallenge's own returned error from the previous attempt for details.
  3. Rotate proxy/IP — persistent challenges usually mean the IP is flagged.
  4. 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

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)