import time,re,json,requests,io
import numpy as np
from PIL import Image
from scipy import ndimage
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
urllib3=__import__('urllib3'); urllib3.disable_warnings()
o=Options(); o.set_preference('dom.webdriver.enabled',False)
o.set_preference('network.http.referer.spoofSource',True)
o.set_preference('network.http.referer.defaultReferrer','https://ein38eu95792b.4656hd15.cc/')
d=webdriver.Firefox(options=o)
try:
    d.get('http://127.0.0.1:9999/geetest_page.html'); time.sleep(6)
    info=d.execute_script("""function r(s){var e=document.querySelector(s);if(!e)return null;var b=e.getBoundingClientRect();return {t:b.top,l:b.left,w:b.width,h:b.height,bg:getComputedStyle(e).backgroundImage};}return {bg:r('.geetest_bg'),slice:r('.geetest_slice'),slicebg:r('.geetest_slice_bg')};""")
    def dl(u):
        m=re.search(r'url\("?([^")]+)"?\)',u or '');return requests.get(m.group(1).replace('http://','https://'),timeout=20,verify=False).content
    bgb=dl(info['bg']['bg']); slb=dl(info['slicebg']['bg'])
    bg=Image.open(io.BytesIO(bgb)).convert('RGB'); sl=Image.open(io.BytesIO(slb)).convert('RGBA')
    bg.save('cc_bg.png'); sl.save('cc_sl.png')
    g=np.array(bg.convert('L')).astype(np.float32)
    sa=np.array(sl); alpha=sa[:,:,3]>128; ys,xs=np.where(alpha)
    print('bg',bg.size,'slice',sl.size,'alpha bbox x0,y0,x1,y1',xs.min(),ys.min(),xs.max(),ys.max(),'area',alpha.sum())
    print('gray pct',[int(np.percentile(g,p)) for p in [1,5,10,25,50,75,90,99]])
    for th in [60,80,100,120]:
        dark=g<th; lab,n=ndimage.label(dark)
        comps=[]
        for i in range(1,n+1):
            ys2,xs2=np.where(lab==i); a=len(xs2)
            if 500<a<9000:
                comps.append((int(xs2.min()),int(ys2.min()),int(xs2.max()),int(ys2.max()),a))
        print('th',th,'components',comps[:10])
    print('rects',json.dumps(info))
finally: d.quit()
