DIYgod/RSSHub · error · Error
Failed to find article content.
Error message
Failed to find article content.
What it means
Thrown when the Cheerio selector `.article-content` returns zero elements on the OpenAI help page for ChatGPT release notes. The handler fetches `https://help.openai.com/en/articles/6825453-chatgpt-release-notes` and expects a `.article-content` element. This is the same pattern as the Atlas variant but for the main ChatGPT release notes article.
Source
Thrown at lib/routes/openai/chatgpt.ts:38
},
name: 'ChatGPT - Release Notes',
maintainers: ['xbot'],
handler,
};
async function handler() {
const articleUrl = 'https://help.openai.com/en/articles/6825453-chatgpt-release-notes';
const cacheIn = await cache.tryGet(
articleUrl,
async () => {
const response = await ofetch(articleUrl);
const $ = load(response);
const articleContent = $('.article-content');
if (articleContent.length === 0) {
throw new Error('Failed to find article content.');
}
const feedTitle = $('h1').first().text();
const feedDesc = 'ChatGPT Release Notes';
const items = $('h1', articleContent)
.toArray()
.map((element) => {
const $h1 = $(element);
const text = $h1.text().trim();
const dateMatch = text.match(/(\w+\s+\d+[stndrh]*,\s+\d{4})/i);
let pubDate: Date | undefined;
if (dateMatch) {
const dateStr = dateMatch[1];
const parsedDate = dayjs(dateStr, ['MMMM Do, YYYY', 'MMMM D, YYYY'], 'en');
if (parsedDate.isValid()) {
pubDate = parsedDate.toDate();View on GitHub (pinned to bed535e087)
Solutions
- Open `https://help.openai.com/en/articles/6825453-chatgpt-release-notes` and inspect the HTML for the current content wrapper class.
- Update the selector on line 34 of `lib/routes/openai/chatgpt.ts` to match.
- If the page is now SPA-rendered, switch to Puppeteer or locate the API endpoint the page uses.
- Verify the article URL still resolves without redirect.
Example fix
// before
const articleContent = $('.article-content');
if (articleContent.length === 0) {
throw new Error('Failed to find article content.');
}
// after — try multiple known selectors
const articleContent = $('.article-content').length ? $('.article-content') : $('article');
if (articleContent.length === 0) {
throw new Error('Failed to find article content.');
} Defensive patterns
Strategy: try-catch
Validate before calling
// Pre-check: verify the article page contains expected content markers
const response = await ofetch(articleUrl);
if (!response.includes('article-content') && !response.includes('<article')) {
throw new Error('OpenAI help page structure may have changed');
} Try / catch
try {
const response = await ofetch(articleUrl);
const $ = load(response);
const articleContent = $('.article-content');
if (articleContent.length === 0) {
throw new Error('Failed to find article content.');
}
} catch (e) {
logger.error('OpenAI ChatGPT help page could not be parsed: HTML structure may have changed');
throw e;
} Prevention
- Use multiple fallback selectors for the content container.
- Periodically verify the article URL still resolves.
- Cache successful parses with a reasonable TTL.
When it happens
Trigger: The OpenAI help center changed its HTML structure so `.article-content` no longer exists. The article was moved or the ID `6825453` is stale. A JS-rendered SPA returned an empty shell. An error/redirect page was served.
Common situations: OpenAI redesigned their help center template. The article was reorganized with a new URL. The help center moved to a client-side rendering approach incompatible with Cheerio.
Related errors
- Failed to find article content.
- Unable to locate Obsidian community search API config
- api error
- No content found. The page structure might have changed.
- Unknown handled type: ${element.type}, ${JSON.stringify(elem
AI-assisted analysis of DIYgod/RSSHub@bed535e087 (2026-08-12).
Data as JSON: /api/errors/cab249d008a1f35d.
Report an issue: GitHub.