From 5ded78f8e4becdb86463b8c7c1ad0fb73d2b354f Mon Sep 17 00:00:00 2001 From: Boki Date: Thu, 12 Jun 2025 08:03:45 -0400 Subject: [PATCH] simple test --- test-simple-proxy.ts | 205 ++++++++++++++++++++++--------------------- 1 file changed, 103 insertions(+), 102 deletions(-) diff --git a/test-simple-proxy.ts b/test-simple-proxy.ts index 8a9eafc..7d7ec27 100644 --- a/test-simple-proxy.ts +++ b/test-simple-proxy.ts @@ -7,110 +7,111 @@ async function simpleProxyTest() { 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; - let eventCount = 0; - page.onNetworkEvent(event => { - // Capture the summary API response - 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); + 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: 8000 }); - console.log('✅ Page loaded'); - - // RIGHT HERE - Interact with the page to find Stocks checkbox and Apply button - try { - console.log('🔍 Looking for Products tab...'); - - // Wait for the page to fully load - await page.waitForTimeout(3000); - - // First, click on the Products tab - const productsTab = page.locator('#productSearchTab[role="tab"][href="#products"]'); - await productsTab.waitFor({ timeout: 10000 }); - 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(2000); - - // 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 + 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); - } else { - console.log('⚠️ Could not find Apply button'); - } + + 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);