ytdl-org/youtube-dl · error · ExtractorError

Can't find any video

Error message

Can't find any video

What it means

Raised by IqiyiIE._real_extract when the downloaded page contains no data-player-tvid / data-shareplattrigger-tvid attribute AND the page also does not parse as a playlist. Without a tvid the extractor can neither fetch stream data nor treat the URL as a playlist, so it gives up.

Source

Thrown at youtube_dl/extractor/iqiyi.py:352

            if len(vlist) < PAGE_SIZE:
                break

        return self.playlist_result(entries, album_id, album_title)

    def _real_extract(self, url):
        webpage = self._download_webpage(
            url, 'temp_id', note='download video page')

        # There's no simple way to determine whether an URL is a playlist or not
        # Sometimes there are playlist links in individual videos, so treat it
        # as a single video first
        tvid = self._search_regex(
            r'data-(?:player|shareplattrigger)-tvid\s*=\s*[\'"](\d+)', webpage, 'tvid', default=None)
        if tvid is None:
            playlist_result = self._extract_playlist(webpage)
            if playlist_result:
                return playlist_result
            raise ExtractorError('Can\'t find any video')

        video_id = self._search_regex(
            r'data-(?:player|shareplattrigger)-videoid\s*=\s*[\'"]([a-f\d]+)', webpage, 'video_id')

        formats = []
        for _ in range(5):
            raw_data = self.get_raw_data(tvid, video_id)

            if raw_data['code'] != 'A00000':
                if raw_data['code'] == 'A00111':
                    self.raise_geo_restricted()
                raise ExtractorError('Unable to load data. Error code: ' + raw_data['code'])

            data = raw_data['data']

            for stream in data['vidl']:
                if 'm3utx' not in stream:
                    continue

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Confirm the URL plays in a browser from the same network/region.
  2. Update youtube-dl/yt-dlp for current iQiyi page structure.
  3. Use the canonical www.iqiyi.com/v_<id>.html or embed URL form for the video.
  4. If the page is a pure listing, pick an actual video page URL.
Defensive patterns

Strategy: try-catch

Validate before calling

import requests
html = requests.get(url, headers={'User-Agent': 'Mozilla/5.0', 'Referer': 'https://www.iqiyi.com/'}, timeout=10).text
import re
if not re.search(r'data-(?:player|shareplattrigger)-tvid\s*=\s*[\'"](\d+)', html):
    skip('no tvid in page')

Try / catch

try:
    ydl.extract_info(url)
except ExtractorError as e:
    if "Can't find any video" in str(e):
        # page has no player markup: verify in browser, try canonical v_<id>.html form, then give up
        report_unsupported(url)

Prevention

When it happens

Trigger: An iqiyi.com (or pps.tv) URL whose HTML lacks the tvid regex match - JS-rendered shell pages, bot-verification pages, removed videos, or URL patterns (e.g. pure search/list pages without tvid) the extractor does not handle.

Common situations: Region-served variants of iqiyi.com that omit the player markup, link shorteners/expired links, or CDN responses requiring cookies; also stale extractor versions after iQiyi markup changes.

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/02cbd715716b837c. Report an issue: GitHub.