{"record":{"id":"991c26607f8dfae8","repo":"jackwener/OpenCLI","slug":"coupang-search-navigation-failed-error-message","errorCode":null,"errorMessage":"coupang search navigation failed: ${error?.message || error}","messagePattern":"coupang search navigation failed: (.+?)","errorType":"exception","errorClass":"CommandExecutionError","httpStatus":null,"severity":"error","filePath":"clis/coupang/search.js","lineNumber":429,"sourceCode":"        { name: 'limit', type: 'int', default: 20, help: 'Max results (max 50)' },\n        { name: 'filter', required: false, help: 'Optional search filter (currently supports: rocket)' },\n    ],\n    columns: ['rank', 'product_id', 'title', 'price', 'unit_price', 'rating', 'review_count', 'rocket', 'delivery_type', 'delivery_promise', 'url'],\n    func: async (page, kwargs) => {\n        const query = String(kwargs.query || '').trim();\n        if (!query) {\n            throw new ArgumentError('query cannot be empty');\n        }\n        const pageNumber = parsePageArg(kwargs.page, 1);\n        const limit = parseLimitArg(kwargs.limit, 20, 50);\n        const filter = String(kwargs.filter || '').trim().toLowerCase();\n        if (filter && filter !== 'rocket') {\n            throw new ArgumentError(`Unsupported --filter \"${filter}\" (supported: rocket)`);\n        }\n        const initialPage = filter ? 1 : pageNumber;\n        const url = `https://www.coupang.com/np/search?q=${encodeURIComponent(query)}&channel=user&page=${initialPage}`;\n        await page.goto(url).catch((error) => {\n            throw new CommandExecutionError(`coupang search navigation failed: ${error?.message || error}`);\n        });\n        if (filter) {\n            const filterResult = await page.evaluate(buildApplyFilterEvaluate(filter)).catch((error) => {\n                throw new CommandExecutionError(`coupang search filter evaluation failed: ${error?.message || error}`);\n            });\n            if (!filterResult?.ok) {\n                throw new EmptyResultError('coupang search', `Filter \"${filter}\" was not available on the current page; try without --filter or wait for Coupang to render the filter bar.`);\n            }\n            await page.wait(3).catch((error) => {\n                throw new CommandExecutionError(`coupang search wait failed: ${error?.message || error}`);\n            });\n            if (pageNumber > 1) {\n                const locationInfo = await page.evaluate(buildCurrentLocationEvaluate()).catch((error) => {\n                    throw new CommandExecutionError(`coupang search location evaluation failed: ${error?.message || error}`);\n                });\n                const filteredUrl = new URL(locationInfo?.href || url);\n                filteredUrl.searchParams.set('page', String(pageNumber));\n                await page.goto(filteredUrl.toString()).catch((error) => {","sourceCodeStart":411,"sourceCodeEnd":447,"githubUrl":"https://github.com/jackwener/OpenCLI/blob/49907e53dc3ade5c223ff0c4c2c2785687cec4e6/clis/coupang/search.js#L411-L447","documentation":"Wraps a failure of page.goto(url) when the coupang search command navigates to the Coupang search results URL (https://www.coupang.com/np/search?q=...). The underlying navigation error is rethrown as a CommandExecutionError (COMMAND_EXEC, exit 1) with a search-specific message.","triggerScenarios":"`opencli coupang search <query>` when page.goto fails: DNS/network failure, connection reset by Coupang, bot-blocking of /np/search, invalid characters breaking the URL (though query is encodeURIComponent'd), navigation timeout, or Chrome/extension disconnected.","commonSituations":"No internet or DNS issues; Coupang blocking datacenter/VPN IPs on the search endpoint; heavy query triggering anti-bot interstitial that fails navigation; corporate proxy; browser daemon not running.","solutions":["Read the inner error message to distinguish timeout vs DNS vs refused.","Confirm https://www.coupang.com/np/search?q=test loads in a normal browser from this machine.","Ensure Chrome is running and the opencli extension/daemon is connected.","Increase --timeout if navigation is timing out on a slow connection.","Retry later or from a different IP if Coupang is blocking your address."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// preflight connectivity\ntry { await fetch('https://www.coupang.com/robots.txt'); } catch { throw new Error('coupang.com unreachable from this machine'); }","typeGuard":"function isNavigationFailure(err) { return err?.code === 'COMMAND_EXEC' && /navigation failed/.test(err.message); }","tryCatchPattern":"try {\n  return await run('coupang search', { query });\n} catch (err) {\n  if (isNavigationFailure(err)) {\n    await sleep(2000);\n    return await run('coupang search', { query }); // one retry for transient network issues\n  }\n  throw err;\n}","preventionTips":["Check network/DNS before batch search runs.","Ensure Chrome + the opencli extension are connected and the daemon is running.","Increase --timeout on slow connections.","If your IP is blocked/geo-restricted, run from an allowed network."],"tags":["network","navigation","search","coupang"],"backgroundTag":"page-navigation-failed","analyzedSha":"49907e53dc3ade5c223ff0c4c2c2785687cec4e6","analyzedAt":"2026-08-29T08:14:47.543Z","schemaVersion":2},"datasetVersion":"2026-08-29T12:17:43.993Z"}