simple test

This commit is contained in:
Boki 2025-06-12 08:03:45 -04:00
parent 54314a0cde
commit 5ded78f8e4

View file

@ -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);