jackwener/OpenCLI · error · CommandExecutionError
Youdao note parser failed: ${reason}
Error message
Youdao note parser failed: ${reason} What it means
CommandExecutionError thrown by normalizeExtractionResult when extraction failed with a reason that is neither 'auth' nor 'not_found' (e.g. 'root_missing', 'react_root_missing', 'store_missing', 'content_data_missing', 'unknown_parser_failure'). The raw reason string is interpolated into the message, indicating Youdao's page structure didn't match what the extractor expects.
Source
Thrown at clis/youdao/note.js:186
})()
`;
}
function normalizeExtractionResult(payload, sourceUrl) {
const data = unwrapEvaluateResult(payload);
if (!Array.isArray(data)) {
throw new CommandExecutionError('Youdao note extractor returned a malformed payload');
}
const ok = data[0] === true;
if (!ok) {
const reason = typeof data[1] === 'string' && data[1].trim() ? data[1].trim() : 'unknown_parser_failure';
if (reason === 'auth') {
throw new AuthRequiredError('note.youdao.com', 'Youdao shared note requires login or additional permission');
}
if (reason === 'not_found') {
throw new EmptyResultError('youdao note', 'The shared note is missing, expired, cancelled, or inaccessible.');
}
throw new CommandExecutionError(`Youdao note parser failed: ${reason}`);
}
const title = String(data[1] ?? '');
const content = String(data[2] ?? '');
const summary = String(data[3] ?? '');
const keywords = String(data[4] ?? '');
const createTime = data[5];
const fileSize = data[6];
const hasContentField = data[7] === true;
const rawContentLength = Number(data[8] ?? 0);
const finalUrl = String(data[9] || sourceUrl);
if (!title) {
throw new CommandExecutionError('Youdao note parser did not extract a title');
}
if (!hasContentField) {
throw new CommandExecutionError('Youdao note parser did not find full note content in the page store');
}
if (rawContentLength > 0 && !content) {
throw new CommandExecutionError('Youdao note parser found note content but extracted no readable text');View on GitHub (pinned to 49907e53dc)
Solutions
- Retry; SPA hydration timing is a frequent cause of store_missing/react_root_missing
- Read the interpolated reason in the message ('store_missing', 'root_missing', etc.) to target the actual failure stage
- Upgrade the CLI to a version whose buildExtractorJs matches the current Youdao page structure
- Increase the pre-evaluate wait (the command waits #root/.file-name/body then ~2s) or run on a faster/stabler network
- Capture a page screenshot/DOM dump at failure time to confirm Youdao's markup and report upstream if the structure changed
Defensive patterns
Strategy: retry
Try / catch
async function withRetry(url, attempts = 3) {
for (let i = 0; i < attempts; i++) {
try { return await youdaoNote(url); }
catch (e) {
const m = String(e.message);
if (/parser failed/.test(m) && i < attempts - 1) { await new Promise(r => setTimeout(r, 2000 * (i + 1))); continue; }
throw e;
}
}
} Prevention
- Retry with backoff — slow SPA hydration is the most common cause (store_missing/react_root_missing)
- Parse the interpolated reason from the message to choose targeted remediation
- Keep the extractor version in sync with Youdao's current page structure
- Capture DOM/screenshot on final failure for upstream bug reports
When it happens
Trigger: Page rendered '#root' missing (blocked/blank page or network error page); React fiber root not found (Youdao changed framework or hydration delayed); Redux-like store not present in fiber tree; store.content.data missing (page redesign); body text didn't classify but extraction still failed.
Common situations: Youdao A/B testing or redesigning the notes page; very slow networks where the SPA hasn't hydrated within the wait window; headless browser being served a simplified/anti-bot page; CDN/region variants rendering different markup.
Related errors
- Youdao note extractor returned a malformed payload
- 该聊天缺少 securityId,无法获取历史消息
- Boss recruiter history response did not include a message li
- BOSS detail page did not expose a complete job posting
- 当前浏览器适配器不支持文件注入
AI-assisted analysis of jackwener/OpenCLI@49907e53dc (2026-08-29).
Data as JSON: /api/errors/c72296c6892bbc79.
Report an issue: GitHub.