You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发aniworld.to爬虫遭遇Google Captcha验证码拦截问题咨询

aniworld.to爬虫重定向页验证码问题解决方案

问题说明

  • 开发目标:实现输入动漫名称即可自动下载aniworld.to站点对应全部剧集的爬虫工具,目前除重定向链路外其余功能均正常运行。
  • 卡点细节:站点Watch按钮跳转的https://aniworld.to/redirect/SOMETHING页面部署Google Captcha验证码,目标跳转链接不直接出现在静态HTML源码中,无法通过常规静态解析获取。
  • 场景特征:验证码触发频率极低,仅需提取验证完成后格式为https://vidoza.net/embed-something.html的重定向链接即可。
  • 参考资源:项目处于早期开发阶段,代码仓库:aniworld_scraper。

推荐实现方案

结合验证码低触发的特征,优先选择人工辅助验证的自动化方案,成本最低、稳定性最高,无需对接付费服务。

实现思路

用支持浏览器内核的Python自动化框架加载重定向页面,默认保持浏览器窗口可见:

  1. 未触发验证码时,工具自动等待页面跳转,匹配到vidoza格式的目标链接后直接提取,全程无需人工介入
  2. 触发验证码时,用户直接在弹出的浏览器窗口中手动完成验证,工具持续监听页面跳转事件,验证通过拿到目标链接后自动关闭浏览器,继续后续下载流程
  3. 开启浏览器持久化上下文,本地存储验证后的Cookie、站点缓存,后续请求复用已有状态,进一步降低验证码触发概率

实现提示:不需要额外编写验证码检测逻辑,只要保持浏览器窗口可见,触发验证码时用户可直观看到验证组件自行操作,工具只需要负责监听跳转拿结果即可,整体开发量极低。

参考实现(基于Playwright)

首先安装依赖:
pip install playwright && playwright install chromium

核心逻辑代码:

import re
from playwright.sync_api import sync_playwright

# 匹配目标vidoza链接格式
VIDOZA_URL_PATTERN = re.compile(r"^https://vidoza\.net/embed-.*\.html$")

def fetch_vidoza_url(redirect_suffix: str, wait_timeout: int = 120) -> str:
    """
    传入redirect路径后缀,返回验证后的vidoza播放链接
    wait_timeout: 最长等待时间(秒),留足人工过验证码的时间
    """
    target_url = ""
    with sync_playwright() as p:
        # 启动持久化浏览器上下文,本地缓存Cookie降低验证码触发率
        context = p.chromium.launch_persistent_context(
            user_data_dir="./browser_cache",
            headless=False,  # 必须关闭无头模式,触发验证码时可供人工操作
            args=["--no-first-run", "--no-default-browser-check"]
        )
        page = context.pages[0] if context.pages else context.new_page()

        # 监听所有页面跳转,匹配到目标链接直接记录
        def handle_navigation(frame):
            nonlocal target_url
            current_url = frame.url
            if VIDOZA_URL_PATTERN.match(current_url):
                target_url = current_url

        page.on("framenavigated", handle_navigation)
        page.goto(f"https://aniworld.to/redirect/{redirect_suffix}")

        # 轮询等待获取目标链接
        for _ in range(wait_timeout):
            if target_url:
                break
            page.wait_for_timeout(1000)

        context.close()
    if not target_url:
        raise TimeoutError("等待验证超时,未获取到有效播放链接")
    return target_url

不推荐的方案说明

不建议使用纯自动绕过验证码的方案:

  • 目前Google reCAPTCHA没有稳定的纯本地免费绕过方案,所有自动绕过能力基本都依赖第三方打码平台,需要按调用次数付费
  • 这类方案依赖验证码平台的识别成功率,随着官方反爬规则更新随时可能失效,结合当前场景验证码触发率极低的特征,投入产出比极低,完全没有必要接入。

内容的提问来源于stack exchange,提问作者ZKWolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:15:39