故障排查

ERROR_PAGEURL:URL 不匹配故障排除指南

ERROR_PAGEURL 表示 pageurl 参数与验证码加载的位置不匹配。求解器根据源域验证令牌,因此 URL 必须正确。


常见原因

原因 例子
缺少协议 example.com 代替 https://example.com
错误的域名 www.example.comexample.com
重定向更改后的 URL /login 的表格重定向至 /auth/login
SPA 路线不匹配 JS 路由 /app/login 与服务器 URL 不匹配
URL编码问题 未编码的空格或特殊字符
来自不同域的 iframe 从子域加载验证码

如何获取正确的 URL

规则:使用浏览器地址栏中验证码可见的 URL。

# WRONG — incomplete URL
pageurl = "staging.example.com/qa-login"

# WRONG — wrong protocol
pageurl = "http://staging.example.com/qa-login"

# CORRECT — full URL with protocol
pageurl = "https://staging.example.com/qa-login"

# CORRECT — with www if that's what the page uses
pageurl = "https://www.staging.example.com/qa-login"

URL 验证助手

from urllib.parse import urlparse


def validate_pageurl(url):
    """Validate pageurl before API submission."""
    parsed = urlparse(url)

    if not parsed.scheme:
        raise ValueError(f"Missing protocol: {url}. Use https://")

    if parsed.scheme not in ("http", "https"):
        raise ValueError(f"Invalid protocol: {parsed.scheme}")

    if not parsed.netloc:
        raise ValueError(f"Missing domain: {url}")

    # Remove fragment (hash) — not sent to server
    clean = f"{parsed.scheme}://{parsed.netloc}{parsed.path}"
    if parsed.query:
        clean += f"?{parsed.query}"

    return clean


# Usage
url = validate_pageurl("https://staging.example.com/qa-login#section")
# Returns: "https://staging.example.com/qa-login"

处理重定向

import requests


def get_final_url(url):
    """Follow redirects to get the actual page URL."""
    resp = requests.get(url, allow_redirects=True, timeout=15)
    return resp.url


# If the login page redirects
original = "https://staging.example.com/qa-login"
final = get_final_url(original)
print(f"Final URL: {final}")
# Use final URL as pageurl

处理 SPA(单页应用程序)

SPA 通过 JavaScript 更改 URL,无需加载整个页面。验证码的域名很重要:

# For SPAs, use the domain root + the route shown in the address bar
# NOT the API endpoint that the form submits to

# WRONG — API endpoint
pageurl = "https://api.example.com/v1/auth/login"

# CORRECT — the page URL shown in browser
pageurl = "https://staging.example.com/qa-login"

Iframe 加载的验证码

当验证码从不同域加载到 iframe 内时:

# If the CAPTCHA is on the MAIN page
pageurl = "https://example.com/register"  # Main page URL

# If the CAPTCHA is in an IFRAME with a different domain
# Still use the main page URL, not the iframe src
pageurl = "https://example.com/register"
# NOT: "https://captcha-frame.example.com/challenge"

正确提交

import requests

# Validate URL first
pageurl = validate_pageurl("https://staging.example.com/qa-login")

resp = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": pageurl,
    "json": 1,
})
result = resp.json()

if result.get("status") == 1:
    print(f"Task ID: {result['request']}")
else:
    print(f"Error: {result.get('request')}")

故障排除

问题 原因 处理方式
尽管 URL 看起来正确但仍出错 www 与非 www 不匹配 准确检查地址栏
URL 有时有效,有时则失败 页面具有 A/B 测试 URL 在求解时捕获 URL
令牌已解决但被网站拒绝 pageurl 域名不匹配 令牌域必须与站点域匹配
在浏览器中工作但在代码中失败 未遵循重定向 使用get_final_url()
URL有查询参数 可能需要参数 包含必要的查询参数

常问问题

URL 路径重要还是域名重要?

域是令牌验证的关键部分。但是,请提供完整路径以获得最佳结果,因为某些网站会验证完整的 URL。

我应该包含查询参数吗?

如果它们是可见 URL 的一部分,请包含它们。删除不影响页面内容的跟踪参数,例如 utm_source

如何处理每次会话更改的 URL?

在自动化脚本中动态提取 URL。不要对包含会话 ID 或令牌的 URL 进行硬编码。


相关指南


获取正确的 URL —用CaptchaAI解决.

该文章已禁用评论。