Explorer
/home/hermes/p8_browser.py
← Zurück ↓ Download
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())