import time,subprocess
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.service import Service
o=Options(); o.set_preference('dom.webdriver.enabled',False)
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('http://127.0.0.1:9999/geetest_page.html'); time.sleep(6)
    info=d.execute_script("""var b=document.querySelector('.geetest_btn');var q=b.getBoundingClientRect();
      return {sx:window.mozInnerScreenX,sy:window.mozInnerScreenY,px:q.left+q.width/2,py:q.top+q.height/2,w:q.width,h:q.height,el:(document.elementFromPoint(q.left+q.width/2,q.top+q.height/2)||{}).className};""")
    print('info',info)
    X=int(info['sx']+info['px']); Y=int(info['sy']+info['py'])
    print('screen',X,Y)
    xdo('mousemove',X,Y); time.sleep(0.5)
    print('mouse loc',subprocess.run(['xdotool','getmouselocation'],capture_output=True,text=True).stdout.strip())
    d.execute_script("""window.__fired=[];var b=document.querySelector('.geetest_btn');['mousedown','mouseup','pointerdown','pointerup','mousemove'].forEach(function(t){b.addEventListener(t,function(e){window.__fired.push(t+'|'+(e.isTrusted?'T':'F'))},{capture:true});});""")
    xdo('mousedown',1); time.sleep(0.3)
    for i in range(20):
        xdo('mousemove',X+(i+1)*5,Y); time.sleep(0.03)
    time.sleep(0.2); xdo('mouseup',1); time.sleep(1.5)
    print('fired',d.execute_script('return window.__fired'))
    print('slice',d.execute_script("var e=document.querySelector('.geetest_slice');var b=document.querySelector('.geetest_bg');return {sl:e.getBoundingClientRect().left,bl:b.getBoundingClientRect().left,st:e.getAttribute('style')};"))
finally: d.quit()
