fix(positions): further improve lot extraction robustness for large accounts
All checks were successful
Build and Push Docker Image / build (push) Successful in 29s
All checks were successful
Build and Push Docker Image / build (push) Successful in 29s
This commit is contained in:
@@ -439,29 +439,6 @@ async def get_positions(
|
|||||||
await page.wait_for_selector('#positionsDetails', timeout=45000)
|
await page.wait_for_selector('#positionsDetails', timeout=45000)
|
||||||
await page.wait_for_timeout(1000)
|
await page.wait_for_timeout(1000)
|
||||||
|
|
||||||
# Try to expand lots using a more reliable evaluate-based approach
|
|
||||||
try:
|
|
||||||
expanded_count = await page.evaluate("""
|
|
||||||
() => {
|
|
||||||
const buttons = Array.from(document.querySelectorAll('tr.position-row sdps-button[sdps-id="costBasisTBD"] button'));
|
|
||||||
let count = 0;
|
|
||||||
buttons.forEach(btn => {
|
|
||||||
// Check if already expanded (usually has a different icon or state, but clicking again often toggles)
|
|
||||||
// For now we just click them all.
|
|
||||||
btn.click();
|
|
||||||
count++;
|
|
||||||
});
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
""")
|
|
||||||
if debug:
|
|
||||||
print(f"Clicked {expanded_count} potential lot expanders")
|
|
||||||
if expanded_count > 0:
|
|
||||||
await page.wait_for_timeout(2000) # Wait for expansion
|
|
||||||
except Exception as e:
|
|
||||||
if debug:
|
|
||||||
print(f"Error expanding lots: {e}")
|
|
||||||
|
|
||||||
await page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
|
await page.evaluate('window.scrollTo(0, document.body.scrollHeight)')
|
||||||
await page.wait_for_timeout(1500)
|
await page.wait_for_timeout(1500)
|
||||||
|
|
||||||
@@ -551,18 +528,20 @@ async def get_positions(
|
|||||||
# Wait for modal to appear
|
# Wait for modal to appear
|
||||||
await page.wait_for_timeout(1000)
|
await page.wait_for_timeout(1000)
|
||||||
|
|
||||||
# Find the active modal (not inert, visible)
|
# Find the active modal (not inert, visible, and matches our symbol)
|
||||||
modal_handle = None
|
modal_handle = None
|
||||||
modals = await page.query_selector_all('app-lot sdps-modal[sdps-id="open-lot-overlay"]')
|
modals = await page.query_selector_all('app-lot sdps-modal[sdps-id="open-lot-overlay"]')
|
||||||
for m in modals:
|
for m in modals:
|
||||||
is_hidden = await m.evaluate('el => el.getAttribute("aria-hidden") === "true" || el.hasAttribute("inert")')
|
is_hidden = await m.evaluate('el => el.getAttribute("aria-hidden") === "true" || el.hasAttribute("inert")')
|
||||||
if not is_hidden:
|
if is_hidden:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Verify title matches symbol to avoid stale modal data
|
||||||
|
title_text = await m.evaluate('el => el.querySelector(".sdps-modal__title")?.innerText || ""')
|
||||||
|
if symbol.upper() in title_text.upper():
|
||||||
modal_handle = m
|
modal_handle = m
|
||||||
break
|
break
|
||||||
|
|
||||||
if not modal_handle and modals:
|
|
||||||
modal_handle = modals[-1] # Fallback to last one
|
|
||||||
|
|
||||||
if modal_handle:
|
if modal_handle:
|
||||||
modal_id = await modal_handle.get_attribute('modal-id')
|
modal_id = await modal_handle.get_attribute('modal-id')
|
||||||
if debug:
|
if debug:
|
||||||
@@ -596,7 +575,14 @@ async def get_positions(
|
|||||||
close_btn = await modal_handle.query_selector('button.sdps-modal__close')
|
close_btn = await modal_handle.query_selector('button.sdps-modal__close')
|
||||||
if close_btn:
|
if close_btn:
|
||||||
await close_btn.click(force=True)
|
await close_btn.click(force=True)
|
||||||
await page.wait_for_timeout(1000)
|
# Wait for modal to actually be removed or hidden
|
||||||
|
try:
|
||||||
|
await page.wait_for_selector(f'app-lot sdps-modal[modal-id="{modal_id}"]', state='hidden', timeout=3000)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
if debug:
|
||||||
|
print(f"DEBUG: Could not find matching visible modal for {symbol}")
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if debug:
|
if debug:
|
||||||
print(f"Error expanding lots for {symbol}: {e}")
|
print(f"Error expanding lots for {symbol}: {e}")
|
||||||
|
|||||||
Reference in New Issue
Block a user