import time,re,json,requests
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
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); d.set_page_load_timeout(40)
try:
    d.get('http://127.0.0.1:9999/geetest_page.html')
    for _ in range(20):
        time.sleep(0.5)
        if d.execute_script("return document.querySelectorAll('.geetest_bg').length>0"): break
    time.sleep(2)
    info=d.execute_script("""
      function r(sel){var e=document.querySelector(sel); if(!e)return null; var b=e.getBoundingClientRect(); return {t:b.top,l:b.left,w:b.width,h:b.height,style:e.getAttribute('style'),bg:getComputedStyle(e).backgroundImage};}
      return {bg:r('.geetest_bg'),slice:r('.geetest_slice'),slicebg:r('.geetest_slice_bg'),btn:r('.geetest_btn'),track:r('.geetest_track')};
    """)
    print(json.dumps(info,indent=1)[:2000])
    open('gt_rects.json','w').write(json.dumps(info))
    for key in ['bg','slicebg']:
        u=info[key]['bg']
        m=re.search(r'url\("?([^")]+)"?\)',u or '')
        if m:
            url=m.group(1).replace('http://','https://')
            print('download',key,url)
            r=requests.get(url,timeout=20,verify=False); open(f'gt_{key}.png','wb').write(r.content); print(' size',len(r.content))
    print('validate',d.execute_script('return window.validateResult'))
finally:
    d.quit()
