import time,subprocess,json
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.service import Service
BASE='http://ein38eu95792b.4656hd15.cc/geetest_page.html'
o=Options(); o.set_preference('dom.webdriver.enabled',False); o.set_preference('network.trr.mode',5)
o.set_preference('network.proxy.type',2); o.set_preference('network.proxy.autoconfig_url','http://127.0.0.1:9999/proxy.pac')
d=webdriver.Firefox(service=Service('./gd0371/geckodriver'), options=o)
def xdo(*a): subprocess.run(['xdotool',*map(str,a)],check=False)
try:
    d.set_window_position(0,0); d.set_window_size(1000,820); d.get(BASE)
    for _ in range(60):
        time.sleep(0.5)
        if d.execute_script("return document.querySelectorAll('.geetest_bg').length>0"): break
    time.sleep(1)
    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};}return {bg:r('.geetest_bg'),slice:r('.geetest_slice'),btn:r('.geetest_btn'),track:r('.geetest_track'),sx:window.mozInnerScreenX,sy:window.mozInnerScreenY};""")
    print('geom',json.dumps(info))
    X=int(info['sx']+info['btn']['l']+info['btn']['w']/2); Y=int(info['sy']+info['btn']['t']+info['btn']['h']/2)
    xdo('mousemove',X,Y); time.sleep(0.3); xdo('mousedown',1); time.sleep(0.2)
    for i in range(20):
        xdo('mousemove',X+(i+1)*5,Y); time.sleep(0.02)
    time.sleep(0.3)
    after=d.execute_script("""var s=document.querySelector('.geetest_slice'),b=document.querySelector('.geetest_bg'),t=document.querySelector('.geetest_track'),bt=document.querySelector('.geetest_btn');
      var sr=s.getBoundingClientRect(),br=b.getBoundingClientRect(),tr=t?t.getBoundingClientRect():null,brr=bt.getBoundingClientRect();
      return {sliceLeftDelta:sr.left-br.left, sliceStyle:s.getAttribute('style'), btnDelta:brr.left-tr.left, bgW:br.width, trackW:tr?tr.width:null, btnW:brr.width};""")
    print('after100',json.dumps(after))
    xdo('mouseup',1)
finally: d.quit()
