import { Browser } from '@stock-bot/browser'; async function simpleProxyTest() { console.log('🔬 Simple Proxy Test...'); try { await Browser.initialize({ headless: true, timeout: 10000, blockResources: false }); console.log('✅ Browser initialized'); await Browser.initialize({ headless: true, timeout: 10000, blockResources: false }); console.log('✅ Browser initialized'); const { page, contextId } = await Browser.createPageWithProxy( 'https://www.interactivebrokers.com/en/trading/products-exchanges.php#/', 'http://doimvbnb-US-rotate:w5fpiwrb9895@p.webshare.io:80' ); console.log('✅ Page created with proxy'); let summaryData: any = null; // Initialize summaryData to store API response let eventCount = 0; page.onNetworkEvent(event => { if (event.url.includes('/webrest/search/product-types/summary')) { console.log(`🎯 Found summary API call: ${event.type} ${event.url}`); if (event.type === 'response' && event.responseData) { console.log(`📊 Summary API Response Data: ${event.responseData}`); try { summaryData = JSON.parse(event.responseData) as any; const totalCount = summaryData[0].totalCount; console.log('📊 Summary API Response:', JSON.stringify(summaryData, null, 2)); console.log(`🔢 Total symbols found: ${totalCount || 'Unknown'}`); } catch (e) { console.log('📊 Raw Summary Response:', event.responseData); } } } eventCount++; console.log(`📡 Event ${eventCount}: ${event.type} ${event.url}`); }); console.log('⏳ Waiting for page load...'); await page.waitForLoadState('domcontentloaded', { timeout: 20000 }); console.log('✅ Page loaded'); // RIGHT HERE - Interact with the page to find Stocks checkbox and Apply button console.log('🔍 Looking for Products tab...'); // Wait for the page to fully load await page.waitForTimeout(20000); // First, click on the Products tab const productsTab = page.locator('#productSearchTab[role="tab"][href="#products"]'); await productsTab.waitFor({ timeout: 20000 }); console.log('✅ Found Products tab'); console.log('🖱️ Clicking Products tab...'); await productsTab.click(); console.log('✅ Products tab clicked'); // Wait for the tab content to load await page.waitForTimeout(5000); // Click on the Asset Classes accordion to expand it console.log('🔍 Looking for Asset Classes accordion...'); const assetClassesAccordion = page.locator( '#products .accordion-item #acc-products .accordion_btn:has-text("Asset Classes")' ); await assetClassesAccordion.waitFor({ timeout: 10000 }); console.log('✅ Found Asset Classes accordion'); console.log('🖱️ Clicking Asset Classes accordion...'); await assetClassesAccordion.click(); console.log('✅ Asset Classes accordion clicked'); // Wait for the accordion content to expand await page.waitForTimeout(2000); console.log('🔍 Looking for Stocks checkbox...'); // Find the span with class "fs-7 checkbox-text" and inner text containing "Stocks" const stocksSpan = page.locator('span.fs-7.checkbox-text:has-text("Stocks")'); await stocksSpan.waitFor({ timeout: 10000 }); console.log('✅ Found Stocks span'); // Find the checkbox by looking in the same parent container const parentContainer = stocksSpan.locator('..'); const checkbox = parentContainer.locator('input[type="checkbox"]'); if ((await checkbox.count()) > 0) { console.log('📋 Clicking Stocks checkbox...'); await checkbox.first().check(); console.log('✅ Stocks checkbox checked'); } else { console.log('⚠️ Could not find checkbox near Stocks text'); } // Wait a moment for any UI updates await page.waitForTimeout(1000); // Find and click the nearest Apply button console.log('🔍 Looking for Apply button...'); const applyButton = page.locator( 'button:has-text("Apply"), input[type="submit"][value*="Apply"], input[type="button"][value*="Apply"]' ); if ((await applyButton.count()) > 0) { console.log('🎯 Clicking Apply button...'); await applyButton.first().click(); console.log('✅ Apply button clicked'); // Wait for any network requests triggered by the Apply button await page.waitForTimeout(2000); } else { console.log('⚠️ Could not find Apply button'); } } catch (interactionError) { const errorMessage = interactionError instanceof Error ? interactionError.message : String(interactionError); console.error('❌ Page interaction failed:', errorMessage); // Get debug info about the page try { const title = await page.title(); console.log(`📄 Current page title: "${title}"`); const stocksElements = await page.locator('*:has-text("Stocks")').count(); console.log(`🔍 Found ${stocksElements} elements containing "Stocks"`); const applyButtons = await page .locator('button:has-text("Apply"), input[value*="Apply"]') .count(); console.log(`🔍 Found ${applyButtons} Apply buttons`); } catch (debugError) { const debugMessage = debugError instanceof Error ? debugError.message : String(debugError); console.log('❌ Could not get debug info:', debugMessage); } } await new Promise(resolve => setTimeout(resolve, 2000)); console.log(`📊 Total events: ${eventCount}`); await Browser.closeContext(contextId); await Browser.close(); console.log('✅ Test completed'); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); console.error('❌ Error:', errorMessage); await Browser.close(); } } simpleProxyTest();