const puppeteer = require('puppeteer'); async function debugWildberries() { console.log('🔍 Запускаем диагностику структуры Wildberries...'); const browser = await puppeteer.launch({ headless: false, // Открываем браузер для визуального контроля devtools: true, // Открываем DevTools args: ['--no-sandbox', '--disable-setuid-sandbox'] }); const page = await browser.newPage(); await page.setUserAgent( 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' ); const searchQuery = 'лабубу'; const url = `https://www.wildberries.ru/catalog/0/search.aspx?search=${encodeURIComponent(searchQuery)}`; console.log(`📖 Открываем: ${url}`); try { await page.goto(url, { waitUntil: 'networkidle2', timeout: 30000 }); // Ждем 3 секунды для полной загрузки await new Promise(resolve => setTimeout(resolve, 3000)); console.log('🔍 Анализируем структуру страницы...'); // Проверяем разные селекторы const selectors = [ '[data-nm-id]', '.product-card', '.product-card__wrapper', '.goods-name', '.product-card__link', '.j-card-link', 'article', '[class*="product"]', '[class*="card"]' ]; console.log('\n🎯 Результаты поиска селекторов:'); for (const selector of selectors) { const count = await page.$$eval(selector, elements => elements.length); console.log(`${selector}: ${count} элементов`); if (count > 0 && count < 20) { // Показываем первые несколько найденных элементов const elements = await page.$$eval(selector, (elements, sel) => { return elements.slice(0, 3).map((el, index) => ({ index, tagName: el.tagName, className: el.className, id: el.id, dataNmId: el.getAttribute('data-nm-id'), href: el.href || (el.querySelector('a') ? el.querySelector('a').href : null), text: el.textContent ? el.textContent.substring(0, 100) : null })); }, selector); console.log(` Примеры элементов для ${selector}:`); elements.forEach(el => { console.log(` ${el.index + 1}. <${el.tagName}> class="${el.className}" data-nm-id="${el.dataNmId}" href="${el.href}"`); if (el.text) console.log(` текст: "${el.text.trim()}"`); }); } } // Проверяем наличие товаров с конкретным артикулом console.log('\n🎯 Поиск товара с артикулом 447020075:'); const articleFound = await page.evaluate(() => { const article = '447020075'; // Ищем по data-nm-id const byDataNmId = document.querySelector(`[data-nm-id="${article}"]`); if (byDataNmId) { return { method: 'data-nm-id', element: byDataNmId.tagName, className: byDataNmId.className, parent: byDataNmId.parentElement ? byDataNmId.parentElement.tagName : null }; } // Ищем в href const byHref = document.querySelector(`a[href*="${article}"]`); if (byHref) { return { method: 'href', element: byHref.tagName, className: byHref.className, href: byHref.href, parent: byHref.parentElement ? byHref.parentElement.tagName : null }; } // Ищем в тексте const allElements = document.querySelectorAll('*'); for (let el of allElements) { if (el.textContent && el.textContent.includes(article)) { return { method: 'text content', element: el.tagName, className: el.className, text: el.textContent.substring(0, 200) }; } } return null; }); if (articleFound) { console.log(`✅ Товар найден методом: ${articleFound.method}`); console.log(` Элемент: <${articleFound.element}> class="${articleFound.className}"`); if (articleFound.href) console.log(` Ссылка: ${articleFound.href}`); if (articleFound.text) console.log(` Текст: ${articleFound.text}`); } else { console.log('❌ Товар с артикулом 447020075 не найден'); } // Сохраняем HTML для анализа const htmlContent = await page.content(); require('fs').writeFileSync('wb-debug.html', htmlContent); console.log('\n💾 HTML страницы сохранен в wb-debug.html'); console.log('\n⏸️ Браузер остается открытым для ручного анализа. Нажмите Enter для закрытия...'); // Ждем ввода пользователя await new Promise(resolve => { process.stdin.once('data', resolve); }); } catch (error) { console.error('❌ Ошибка:', error); } finally { await browser.close(); } } debugWildberries().catch(console.error);