import asyncio, json
from pathlib import Path
from playwright.async_api import async_playwright
BASE='https://sma.agentsolutions-mallorca.com'
async def check(page, url, shot):
await page.goto(BASE+url, wait_until='domcontentloaded', timeout=60000)
await page.wait_for_timeout(2500)
cards=page.locator('.sig')
n=await cards.count()
await page.locator('.sig .thumb img').evaluate_all('(els)=>els.forEach(e=>e.loading="eager")')
for i in range(n):
try:
await cards.nth(i).evaluate('(e)=>e.scrollIntoView({block:"center"})')
except Exception:
pass
await page.wait_for_timeout(120)
await page.wait_for_timeout(700)
imgs=page.locator('.sig .thumb img')
imn=await imgs.count()
loaded=0; broken=0; hidden=0; broken_items=[]
for i in range(imn):
d=await imgs.nth(i).evaluate('(e)=>({w:e.naturalWidth,h:e.naturalHeight,display:getComputedStyle(e).display,src:e.src,card:e.closest(".sig")?.id})')
if d['w']>0 and d['h']>0: loaded+=1
else: broken+=1; broken_items.append(d)
if d['display']=='none': hidden+=1
await page.screenshot(path=shot, full_page=True)
return {'url':url,'http':await page.evaluate('()=>document.readyState'),'cards':n,'img_tags':imn,'loaded':loaded,'broken':broken,'hidden':hidden,'broken_items':broken_items}
async def main():
async with async_playwright() as pw:
b=await pw.chromium.launch(headless=True, executable_path='/snap/bin/chromium', args=['--no-sandbox'])
p=await b.new_page(viewport={'width':1440,'height':1000})
out=[]
out.append(await check(p,'/cockpit?days=30','/tmp/AA-045-F8-P8-cockpit-30T.png'))
out.append(await check(p,'/cockpit?days=14&sort=facebook','/tmp/AA-045-F8-P8-cockpit-14T-FB.png'))
cards=p.locator('.sig'); n=await cards.count()
if n:
await cards.nth(0).locator('.thumb').click()
await p.wait_for_timeout(500)
out.append({'detail_panel_class':await p.locator('#pcontent').get_attribute('class'),'detail_panel_visible':await p.locator('#pcontent').is_visible()})
print(json.dumps(out,ensure_ascii=False))
await b.close()
asyncio.run(main())