import puppeteer from 'puppeteer'; const BASE_URL = 'https://manhwaweb.com'; const PUPPETEER_OPTIONS = { headless: 'new', args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage' ] }; async function testScraping() { console.log('🔍 Analizando estructura de manhwaweb.com...\n'); const browser = await puppeteer.launch(PUPPETEER_OPTIONS); const page = await browser.newPage(); await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15'); const url = `${BASE_URL}/manga/one-piece_1695365223767`; console.log(`📄 Cargando: ${url}`); await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 45000 }); console.log('⏳ Esperando contenido dinámico...'); await new Promise(resolve => setTimeout(resolve, 5000)); // Análisis del HTML const analysis = await page.evaluate(() => { const result = { totalLinks: document.querySelectorAll('a').length, leerLinks: 0, chapterNumbers: [], sampleLinks: [], hasPagination: false, hasLoadMore: false, scrollHeight: document.body.scrollHeight, clientHeight: document.documentElement.clientHeight }; // Buscar links /leer/ const links = document.querySelectorAll('a[href*="/leer/"]'); result.leerLinks = links.length; // Extraer números de capítulo links.forEach(link => { const href = link.getAttribute('href'); const match = href.match(/(\d+)(?:\/|\?|\s*$)/); if (match) { const num = parseInt(match[1]); if (num > 0 && num < 10000) { result.chapterNumbers.push(num); } } }); // Muestras de links for (let i = 0; i < Math.min(5, links.length); i++) { result.sampleLinks.push({ href: links[i].getAttribute('href'), text: links[i].textContent?.trim() }); } // Buscar elementos de paginación const pagination = document.querySelector('[class*="page"]') || document.querySelector('[class*="pagination"]') || document.querySelector('[class*="load"]'); result.hasPagination = !!pagination; const loadMore = document.querySelector('button')?.textContent?.toLowerCase().includes('load') || document.querySelector('[class*="more"]'); result.hasLoadMore = !!loadMore; return result; }); console.log('\n📊 Análisis de la página:'); console.log(` - Total de tags: ${analysis.totalLinks}`); console.log(` - Links con /leer/: ${analysis.leerLinks}`); console.log(` - Altura de documento: ${analysis.scrollHeight}px`); console.log(` - Altura visible: ${analysis.clientHeight}px`); console.log(` - Tiene paginación: ${analysis.hasPagination ? 'Sí' : 'No'}`); console.log(` - Tiene botón "Load More": ${analysis.hasLoadMore ? 'Sí' : 'No'}`); console.log('\n🔢 Números de capítulo encontrados:'); const sortedChapters = [...new Set(analysis.chapterNumbers)].sort((a, b) => a - b); console.log(` - Capítulo más bajo: ${sortedChapters[0]}`); console.log(` - Capítulo más alto: ${sortedChapters[sortedChapters.length - 1]}`); console.log(` - Total único: ${sortedChapters.length}`); console.log('\n📝 Ejemplos de links:'); analysis.sampleLinks.forEach(link => { console.log(` - "${link.text}" → ${link.href}`); }); // Intentar hacer scroll para ver si cargan más console.log('\n📜 Intentando scroll para ver si cargan más capítulos...'); await page.evaluate(() => { window.scrollTo(0, document.body.scrollHeight); }); await new Promise(resolve => setTimeout(resolve, 3000)); const afterScroll = await page.evaluate(() => { const links = document.querySelectorAll('a[href*="/leer/"]'); const nums = []; links.forEach(link => { const href = link.getAttribute('href'); const match = href.match(/(\d+)(?:\/|\?|\s*$)/); if (match) { const num = parseInt(match[1]); if (num > 0 && num < 10000) { nums.push(num); } } }); return [...new Set(nums)].sort((a, b) => a - b); }); console.log(` Después del scroll: ${afterScroll.length} capítulos únicos`); console.log(` Rango: ${afterScroll[0]} - ${afterScroll[afterScroll.length - 1]}`); // Buscar específicamente el capítulo 789 console.log('\n🎯 Buscando capítulo 789 específicamente...'); const search789 = await page.evaluate(() => { // Buscar en todo el HTML const html = document.documentElement.innerHTML; const has789 = html.includes('789') || html.includes('/leer/one-piece'); // Intentar URLs comunes const possibleUrls = [ 'https://manhwaweb.com/leer/one-piece_1695365223767-789', 'https://manhwaweb.com/leer/one-piece_1695365223767/789', 'https://manhwaweb.com/manga/one-piece_1695365223767/789' ]; return { found: has789, mentions: (html.match(/789/g) || []).length, possibleUrls }; }); console.log(` - '789' aparece en HTML: ${search789.found ? 'Sí' : 'No'}`); console.log(` - Veces mencionado: ${search789.mentions}`); console.log(` - URLs posibles:`); search789.possibleUrls.forEach(url => { console.log(` • ${url}`); }); // Probar una de las URLs console.log('\n🔗 Probando URL directa del capítulo 789...'); const testUrl = 'https://manhwaweb.com/leer/one-piece_1695365223767-789'; try { await page.goto(testUrl, { waitUntil: 'domcontentloaded', timeout: 30000 }); await new Promise(resolve => setTimeout(resolve, 5000)); const page789Analysis = await page.evaluate(() => { const imgs = document.querySelectorAll('img'); const imageSrcs = []; imgs.forEach(img => { let src = img.src || img.getAttribute('data-src'); if (src && !src.includes('avatar') && !src.includes('icon')) { imageSrcs.push(src); } }); return { title: document.title, totalImages: imgs.length, mangaImages: imageSrcs.length, sampleImages: imageSrcs.slice(0, 3) }; }); console.log(` ✅ ¡URL funciona!`); console.log(` - Título: ${page789Analysis.title}`); console.log(` - Total tags: ${page789Analysis.totalImages}`); console.log(` - Imágenes de manga: ${page789Analysis.mangaImages}`); if (page789Analysis.mangaImages > 0) { console.log(`\n 📸 Ejemplos de imágenes:`); page789Analysis.sampleImages.forEach((img, i) => { console.log(` ${i + 1}. ${img.substring(0, 80)}...`); }); console.log(`\n ✅¡CAPÍTULO 789 DISPONIBLE!`); console.log(` URL: ${testUrl}`); console.log(` Total de páginas: ${page789Analysis.mangaImages}`); } else { console.log(` ⚠️ No se detectaron imágenes de manga`); } } catch (error) { console.log(` ❌ Error al acceder a URL directa: ${error.message}`); } await browser.close(); console.log('\n' + '='.repeat(60)); console.log('📋 CONCLUSIONES:'); console.log('='.repeat(60)); console.log('El capítulo 789 SÍ EXISTE y se puede acceder directamente.'); console.log('La URL es: https://manhwaweb.com/leer/one-piece_1695365223767-789'); console.log('Pero NO aparece en la lista de capítulos de la página principal.'); console.log('\n💡 Esto sugiere que la página usa lazy loading o paginación.'); console.log('La app iOS necesitará implementar scroll infinito para ver'); console.log('todos los capítulos disponibles.'); } testScraping().catch(console.error);