Explorer
/proc/184/root/tmp/korr01_browser.py
← Zurück ↓ Download
import json
from pathlib import Path
from playwright.sync_api import sync_playwright
base='https://sma.agentsolutions-mallorca.com/cockpit'
res=[]
with sync_playwright() as p:
 b=p.chromium.launch(headless=True); page=b.new_page(viewport={'width':1440,'height':1000}); errors=[]
 page.on('pageerror',lambda e:errors.append(str(e))); page.on('console',lambda m:errors.append(m.text) if m.type=='error' else None)
 page.goto(base+'?days=3&sort=relevance&tab=radar',wait_until='networkidle')
 def group(label):
  h=page.locator('.cat-hdr').filter(has_text=label).first; body=h.locator('xpath=following-sibling::*[1]'); before='collapsed' in (body.get_attribute('class') or '')
  h.click(); page.wait_for_timeout(50); opened='collapsed' not in (body.get_attribute('class') or '')
  h.locator('span').last.click(); page.wait_for_timeout(50); toggled='collapsed' in (body.get_attribute('class') or '')
  h.click(); page.wait_for_timeout(50); reopened='collapsed' not in (body.get_attribute('class') or '')
  return {'group':label,'opened':opened,'arrow_closed':toggled,'reopened':reopened}
 for label in ['ALLGEMEIN','FERIENIMMOBILIEN','WETTER & KLIMA','KONKURRENZ & MARKT']:
  res.append(group(label))
 page.screenshot(path='/home/hermes/Antworten/AA-023-KORR-01-A-allgemein.png',full_page=True)
 # normal signal: expand all nonempty and click first non-competition card
 btn=page.locator('#blocked-filter-btn')
 if btn.is_visible(): btn.click()
 for h in page.locator('.cat-hdr').all():
  body=h.locator('xpath=following-sibling::*[1]')
  if 'collapsed' in (body.get_attribute('class') or ''): h.click()
 normal=page.locator('.sig:not(.ccard)').first; normal.locator('.thumb').click(force=True); normal_text=page.locator('#pcontent').inner_text(); res.append({'normal_panel': 'Post analysieren' in normal_text})
 comp=page.locator('.ccard').first; comp.locator('.thumb').click(force=True); comp_text=page.locator('#pcontent').inner_text(); res.append({'competition_panel':{'post_analysieren':'Post analysieren' in comp_text,'post_erstellen':'Post erstellen' in comp_text,'konkurrenz':'Konkurrenz analysieren' in comp_text}})
 page.screenshot(path='/home/hermes/Antworten/AA-023-KORR-01-B-konkurrenz.png',full_page=True)
 # Meta freshness: show blocked, open 5T and capture
 page.goto(base+'?days=5&sort=relevance&tab=radar',wait_until='networkidle'); btn=page.locator('#blocked-filter-btn');
 if btn.is_visible(): btn.click()
 page.screenshot(path='/home/hermes/Antworten/AA-023-KORR-01-C-meta-freshness.png',full_page=True)
 # filter + reload + group
 for sort in ['op_priority','score','facebook','linkedin','relevance']:
  page.goto(f'{base}?days=5&sort={sort}&tab=radar',wait_until='networkidle'); res.append({'filter':sort,'url':page.url,'groups':page.locator('.cat-hdr').count(),'errors':list(errors)}); errors.clear()
 page.reload(wait_until='networkidle'); res.append({'reload_url':page.url,'groups':page.locator('.cat-hdr').count(),'errors':list(errors)}); errors.clear()
 b.close()
Path('/home/hermes/Antworten/AA-023-KORR-01-browser.json').write_text(json.dumps(res,ensure_ascii=False,indent=2))
print(json.dumps({'group_results':res[:4],'normal':res[4],'competition':res[5],'filter_steps':len(res)-6,'console_errors':sum(len(x.get('errors',[])) for x in res if isinstance(x,dict))},ensure_ascii=False))