Skip to main content
Glama
test-exact-url.js9.23 kB
#!/usr/bin/env node /** * Direct URL Access Test - Test exact user URL with minimal automation interference */ import { chromium } from 'playwright'; async function testExactURL() { console.log('🔍 Testing Direct Access to User\'s Exact URL'); // User's exact working URL const exactURL = 'https://composer.euconquisto.com/#/embed/auth-with-token/pt_br/home/36c92686-c494-ec11-a22a-dc984041c95d/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImFkbWluLmRlc2Vudm9sdmltZW50b0BldWNvbnF1aXN0by5jb20iLCJuYW1lIjoiQWRtaW4gRGV2Iiwib2lkIjoiNWZiM2RlYzYtYzQ5NC1lYzExLWEyMmEtZGM5ODQwNDFjOTVkIiwiZGlyZWN0b3J5IjoiYjBmZWY4NjAtYzQ5NC1lYzExLWEyMmEtZGM5ODQwNDFjOTVkIiwiYXBpbSI6IkVFQzUzQTI0LUVDMEUtNDFCOS05NDA1LTg2QTE3NTAwREIzNCIsImRpcm4iOiJEZXNlbnZvbHZpbWVudG8iLCJyb2xlIjpbIlJldmlld0NvbnRyaWJ1dG9yIiwiQ29udHJpYnV0b3JHbG9iYWwiLCJBZG1pbmlzdHJhdG9yR2xvYmFsIl0sImRjbiI6WyJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREM0dFYyMXRTRS1vZHA5NElpMnVVYTNqMXNxRXl6YWhrN3ZxWlN5MG5sLV94c3cyb0xEN05jT2ppRThWelhyZDBEamF3XzQyVW1fZmxrT1loZzlVN0ZKOGx5N1dWQVFBQUFQX18iLCJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREM0c2xCWS0zTjB5WkU1S1NNSFhKTzhjcm0wNS1remgtYVBzTXhtMnZvOTBxYzhXTjktX08wRzRMbmo5dDRqb2R4bnZNdVkycHJEd1NrYlkyamJOMnpuNXJvemJmR3dBQUFQX18iLCJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREM0dnpkMWU1SDFGTzVhenRyR1RuZXZ6emx0U0djM3VFT1IteHExWXZNVHF5NGstaThXR0gwd292cC1ka3FjNm82d2xSZkM0d3k5MVcxSHFqOFU4aEMtRWZMa0pSQUFBQUFQX18iLCJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREM0dU5XMnUyS3A5dXZhUGhkOFNpOE9KNV8yTmRmZnNTSC0temZHTXVmX084Wm5GbXFXRE5qeE1ubnBWelRkVTBPVF9mUldtNVVhTkxlV2oyTjY5Y3JRS0x1SmJQQUFBQUFQX18iLCJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREM0czY2NE5odVhwck52S3FiV1RuUEtGNTU2UzRycXdXNDJ1SnkzbjNGVkxFVjZ4VlljdU9kTnVrZXliMjdKbjRlOS1GaGNNdW1iOTZ1cUx0aEptSDJrX0h0U29MQUFBQUFQX18iLCJINHNJQUFBQUFBQUFBMkptWUdBd1pRQ0JaQXVqRkdNREx3dWpCWjhyQW81RUxEaHRvQ2ZUdmVQcTVET2hpd1dtM3A2eFktTDdIYkpTb2RFU2I2SUVWQ3BQcXpETTJ2WlR6VzlsMXBrWlBFb3Zkbl8tV3R2LWY0bkt3dmEtU0FBQUFBRF9fdyJdLCJzY3AiOlsiSDRzSUFBQUFBQUFBQTJKbVlHRHdZQUFCMDZRMDA5VFU1RlNKTmZzV1NKNDRWWGZBeHZYeDVEc3lzaFhPNmllVGk0cWVYbTZaVVN2QzZ2djNST0hNRDBkVHBDVHUzekFfVUMtWVVIOHIyMzNlS29mQ0hZR3UwWG83aWswWGROWVVxdmotV0hfclhiU3VVYnJZM1VZQUFBQUFfXzgiLCJINHNJQUFBQUFBQUFBd0RTQWkzOUF3QUFBck1BQUFBQUFHRTVaalF6TkRsa2E0TWozbjdQejY0dmpPSWl5LVlNb3dhRDdlMWpqcDZJakE2SVFZMi14TFNOTWFSZWNrTTdzWEJKamR2SkpoeUF5TnZJVHQ5aUFFWHcybVVzM3lIbGc2UHNtSld1Mm1EU2UwbXlrYnQ0OGl1NTlkYTIxMVBNdkxyRzdxOV9teDlhYWI0SjdZbWlNODg2OTVUclk3WFY1Nmlsb3UwdnQ4VmdBMWptbkdYd0paa0ZDTXhYaUlhcGl5S01TVGlfa3BnREdQdlRlYUNNdE5GSXlIU0gwUTZ3bTFwRkJBYzRMQ1dqRThMeWtnc1ZtbEJxRG9aek1oZTVnY21sZHl0VW1FVFltakIyakVaUHdvd0M2NFRZb1JudDJOWkpmRDdDZXg1T3FqY1ptVU5tNjMtVlRYOFh0UEtza1BpSnpIb3kzcHF5dXVycnVrTndZenducHpwak51OEdKZXQ4V2RoMl85ckNoVnpPUnR4N1N5UXEyb2prUmJfWEphenFtTnEwMEVTcTNSZUVSX0pQZmhGOGg4bGlxcGVWeE1FSG5RUGFmMXp2N3FVQ3JzTWtrVjc1TmxnRGVUZ1YvWGVyX0Rud3FkektCOFdtY1p0OXFjMXZpU0ROV1JHZVN0bHc3d250UzFSSXlBN205cS01YU9FLUx0ODB3bE1HTkxOTi1TVFN3OWVDN2dxVmQtSUZZWlhYQ2NZcWNfcWc1dDhodFdSLVJ2cUJsX3Fjbkt2N2xhaHk5elRTaHJfX1BTRWJqdTg0SkhDV3I5SXhGd2lzYVd1eVZiMUp0ZUQzcDk0WnpWZDhnTEJQRGFRVUJMZHc1SVEzWkJIc3daTXExRjJqVGdEcF92RDJLQzZzVnd1dVhaa3RzYWlrc3pMZW5NcTFUVjRUMmF5QUdyVHB3UlUzMFMwc3hfQ3pCRVlLREV0b2s4eDI5TGlnUnlHMnVfZDVpOHRyVEJ1WTNjVFdzSXVIdzRibXNVV1lkTXNwblRMMXpwNE1LWUFBQURfX3ciXSwibmJmIjoxNzQ4ODc2OTU1LCJleHAiOjE3NTE0Njg5NTUsImlhdCI6MTc0ODg3Njk1NSwiaXNzIjoiaHR0cHM6Ly9hcGkuZGlnaXRhbHBhZ2VzLmNvbS5iciIsImF1ZCI6IkV1Q29ucXVpc3RvIn0.iTUfl6-mwLwFaxYYPf6PufRSYbSJlw3tKejmbc5G42g'; let browser, page; try { console.log('1️⃣ Launching browser with normal user-like configuration...'); // Use a more normal browser configuration browser = await chromium.launch({ headless: false, args: [ '--no-sandbox', '--disable-dev-shm-usage', '--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' ] }); const context = await browser.newContext({ viewport: { width: 1280, height: 720 } }); page = await context.newPage(); // Set reasonable timeouts page.setDefaultTimeout(30000); page.setDefaultNavigationTimeout(60000); // Log page events for debugging page.on('console', msg => console.log(`PAGE: ${msg.text()}`)); page.on('pageerror', error => console.error(`PAGE ERROR: ${error.message}`)); page.on('response', response => { if (!response.ok() && response.status() !== 404) { console.log(`HTTP ${response.status()}: ${response.url()}`); } }); console.log('2️⃣ Navigating to exact user URL...'); console.log(`URL: ${exactURL.substring(0, 100)}...`); const response = await page.goto(exactURL, { waitUntil: 'domcontentloaded', timeout: 60000 }); if (!response || !response.ok()) { console.error(`❌ Navigation failed with status: ${response?.status()}`); return; } console.log('✅ Page loaded successfully'); // Wait a bit for JavaScript to initialize console.log('3️⃣ Waiting for application to initialize...'); await page.waitForTimeout(10000); // Give it 10 seconds // Check what we have on the page const content = await page.evaluate(() => { const body = document.body; const hasButtons = document.querySelectorAll('button').length; const hasComposerContent = body.textContent?.includes('Nova') || body.textContent?.includes('Composição') || body.textContent?.includes('Composer'); const hasSignificantContent = body.textContent && body.textContent.length > 100; const hasReactApp = document.querySelector('[data-reactroot]') || document.querySelector('#root') || document.querySelector('.app'); return { bodyTextLength: body.textContent?.length || 0, buttonCount: hasButtons, hasComposerContent, hasSignificantContent, hasReactApp: !!hasReactApp, title: document.title, bodyClasses: body.className, firstButtonText: document.querySelector('button')?.textContent || 'No buttons found' }; }); console.log('4️⃣ Page content analysis:'); console.log(' - Page title:', content.title); console.log(' - Body text length:', content.bodyTextLength); console.log(' - Button count:', content.buttonCount); console.log(' - Has Composer content:', content.hasComposerContent); console.log(' - Has significant content:', content.hasSignificantContent); console.log(' - Has React app:', content.hasReactApp); console.log(' - Body classes:', content.bodyClasses); console.log(' - First button text:', content.firstButtonText); // Take a screenshot to see the actual state const timestamp = Date.now(); await page.screenshot({ path: `direct-access-test-${timestamp}.png`, fullPage: true }); console.log(`📸 Screenshot saved: direct-access-test-${timestamp}.png`); // Look specifically for "NOVA COMPOSIÇÃO" button const novaButton = await page.locator('text=NOVA COMPOSIÇÃO').first(); const novaButtonExists = await novaButton.count() > 0; console.log('5️⃣ "NOVA COMPOSIÇÃO" button check:', novaButtonExists ? '✅ Found' : '❌ Not found'); if (novaButtonExists) { console.log('🎉 SUCCESS: Composer page loaded with "NOVA COMPOSIÇÃO" button visible!'); } else { console.log('⚠️ ISSUE: Page loaded but "NOVA COMPOSIÇÃO" button not visible'); // Check for any buttons that might be the new composition button const allButtons = await page.locator('button').all(); console.log(' Available buttons:'); for (let i = 0; i < Math.min(allButtons.length, 5); i++) { const text = await allButtons[i].textContent(); console.log(` - Button ${i + 1}: "${text}"`); } } } catch (error) { console.error('❌ Test failed:', error.message); // Take error screenshot if page exists if (page) { try { await page.screenshot({ path: `direct-access-error-${Date.now()}.png`, fullPage: true }); console.log('📸 Error screenshot saved'); } catch (screenshotError) { console.error('Could not take error screenshot:', screenshotError.message); } } } finally { if (browser) { await browser.close(); console.log('🔒 Browser closed'); } } } // Run the test testExactURL().catch(console.error);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rkm097git/euconquisto-composer-mcp-poc'

If you have feedback or need assistance with the MCP directory API, please join our Discord server