ytdl-org/youtube-dl · error · ExtractorError
%s said: %s
Error message
%s said: %s
What it means
Raised by the XVideos extractor when the video page contains an <h1 class="inlineError"> element. The site uses this heading for availability errors (video deleted, not available in your language/region), and its HTML-stripped text is forwarded after the extractor name.
Source
Thrown at youtube_dl/extractor/xvideos.py:89
'url': 'https://it.xvideos.com/video4588838/biker_takes_his_girl',
'only_matching': True
}, {
'url': 'http://de.xvideos.com/video4588838/biker_takes_his_girl',
'only_matching': True
}, {
'url': 'https://de.xvideos.com/video4588838/biker_takes_his_girl',
'only_matching': True
}]
def _real_extract(self, url):
video_id = self._match_id(url)
webpage = self._download_webpage(
'https://www.xvideos.com/video%s/0' % video_id, video_id)
mobj = re.search(r'<h1 class="inlineError">(.+?)</h1>', webpage)
if mobj:
raise ExtractorError('%s said: %s' % (self.IE_NAME, clean_html(mobj.group(1))), expected=True)
title = self._html_search_regex(
(r'<title>(?P<title>.+?)\s+-\s+XVID',
r'setVideoTitle\s*\(\s*(["\'])(?P<title>(?:(?!\1).)+)\1'),
webpage, 'title', default=None,
group='title') or self._og_search_title(webpage)
thumbnails = []
for preference, thumbnail in enumerate(('', '169')):
thumbnail_url = self._search_regex(
r'setThumbUrl%s\(\s*(["\'])(?P<thumbnail>(?:(?!\1).)+)\1' % thumbnail,
webpage, 'thumbnail', default=None, group='thumbnail')
if thumbnail_url:
thumbnails.append({
'url': thumbnail_url,
'preference': preference,
})
View on GitHub (pinned to 956b8c5855)
Solutions
- Read the forwarded 'XVideos said:' message for the precise cause.
- For region blocks, retry from a permitted region.
- For deleted videos, look for a re-upload; the ID is gone permanently.
Defensive patterns
Strategy: try-catch
Try / catch
try:
info = ydl.extract_info(url)
except ExtractorError as e:
if str(e).startswith('XVideos said:'):
log_skip(url, str(e).split('said:', 1)[1])
else:
raise Prevention
- Use the canonical www.xvideos.com URL form; language mirrors can alter page markup.
- Classify forwarded messages into deleted vs region-blocked before deciding to retry.
- Never retry deleted-video errors — they are permanent.
When it happens
Trigger: Downloading https://www.xvideos.com/video<id>/0 whose page matches r'<h1 class="inlineError">(.+?)</h1>'; the check runs immediately after the webpage download.
Common situations: Removed or deactivated uploads; videos blocked in the requester's country; the de.xvideos mirror redirecting to a page with an inline error for localized content.
Related errors
- error
- The video is not available, Facebook said: "%s"
- Video %s is no longer available
- %s said: %s
- %s returned error: %s - %s
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/1f1f8e428877fcd8.
Report an issue: GitHub.