@@ -389,7 +389,9 @@ def uc_special_open_if_cf(
389389 driver .execute_script ('window.open("%s","_blank");' % url )
390390 driver .close ()
391391 if mobile_emulator :
392- driver .switch_to .window (driver .window_handles [- 1 ])
392+ page_actions .switch_to_window (
393+ driver , driver .window_handles [- 1 ], 2
394+ )
393395 uc_metrics = {}
394396 if (
395397 isinstance (device_width , int )
@@ -419,7 +421,9 @@ def uc_special_open_if_cf(
419421 except Exception :
420422 pass
421423 if not mobile_emulator :
422- driver .switch_to .window (driver .window_handles [- 1 ])
424+ page_actions .switch_to_window (
425+ driver , driver .window_handles [- 1 ], 2
426+ )
423427 else :
424428 driver .default_get (url ) # The original one
425429 else :
@@ -450,7 +454,7 @@ def uc_open_with_tab(driver, url):
450454 with driver :
451455 driver .execute_script ('window.open("%s","_blank");' % url )
452456 driver .close ()
453- driver . switch_to . window (driver .window_handles [- 1 ])
457+ page_actions . switch_to_window (driver , driver .window_handles [- 1 ], 2 )
454458 else :
455459 driver .default_get (url ) # The original one
456460 return None
@@ -476,10 +480,14 @@ def uc_open_with_reconnect(driver, url, reconnect_time=None):
476480 driver .reconnect (reconnect_time )
477481 time .sleep (0.004 )
478482 try :
479- driver .switch_to .window (driver .window_handles [- 1 ])
483+ page_actions .switch_to_window (
484+ driver , driver .window_handles [- 1 ], 2
485+ )
480486 except InvalidSessionIdException :
481487 time .sleep (0.05 )
482- driver .switch_to .window (driver .window_handles [- 1 ])
488+ page_actions .switch_to_window (
489+ driver , driver .window_handles [- 1 ], 2
490+ )
483491 else :
484492 driver .default_get (url ) # The original one
485493 return None
@@ -546,17 +554,17 @@ def uc_click(
546554 driver .reconnect (reconnect_time )
547555
548556
549- def verify_pyautogui_has_a_headed_browser ():
557+ def verify_pyautogui_has_a_headed_browser (driver ):
550558 """PyAutoGUI requires a headed browser so that it can
551559 focus on the correct element when performing actions."""
552- if sb_config . headless or sb_config . headless2 :
560+ if hasattr ( driver , "_is_hidden" ) and driver . _is_hidden :
553561 raise Exception (
554562 "PyAutoGUI can't be used in headless mode!"
555563 )
556564
557565
558- def install_pyautogui_if_missing ():
559- verify_pyautogui_has_a_headed_browser ()
566+ def install_pyautogui_if_missing (driver ):
567+ verify_pyautogui_has_a_headed_browser (driver )
560568 pip_find_lock = fasteners .InterProcessLock (
561569 constants .PipInstall .FINDLOCK
562570 )
@@ -608,7 +616,7 @@ def get_configured_pyautogui(pyautogui_copy):
608616
609617
610618def uc_gui_press_key (driver , key ):
611- install_pyautogui_if_missing ()
619+ install_pyautogui_if_missing (driver )
612620 import pyautogui
613621 pyautogui = get_configured_pyautogui (pyautogui )
614622 gui_lock = fasteners .InterProcessLock (
@@ -619,7 +627,7 @@ def uc_gui_press_key(driver, key):
619627
620628
621629def uc_gui_press_keys (driver , keys ):
622- install_pyautogui_if_missing ()
630+ install_pyautogui_if_missing (driver )
623631 import pyautogui
624632 pyautogui = get_configured_pyautogui (pyautogui )
625633 gui_lock = fasteners .InterProcessLock (
@@ -631,7 +639,7 @@ def uc_gui_press_keys(driver, keys):
631639
632640
633641def uc_gui_write (driver , text ):
634- install_pyautogui_if_missing ()
642+ install_pyautogui_if_missing (driver )
635643 import pyautogui
636644 pyautogui = get_configured_pyautogui (pyautogui )
637645 gui_lock = fasteners .InterProcessLock (
@@ -648,7 +656,7 @@ def uc_gui_handle_cf(driver, frame="iframe"):
648656 and 'aria-label="Cloudflare"' not in source
649657 ):
650658 return
651- install_pyautogui_if_missing ()
659+ install_pyautogui_if_missing (driver )
652660 import pyautogui
653661 pyautogui = get_configured_pyautogui (pyautogui )
654662 gui_lock = fasteners .InterProcessLock (
@@ -664,9 +672,7 @@ def uc_gui_handle_cf(driver, frame="iframe"):
664672 if not is_in_frame :
665673 # Make sure the window is on top
666674 page_actions .switch_to_window (
667- driver ,
668- driver .current_window_handle ,
669- timeout = settings .SMALL_TIMEOUT ,
675+ driver , driver .current_window_handle , 2
670676 )
671677 if not is_in_frame or needs_switch :
672678 # Currently not in frame (or nested frame outside CF one)
@@ -1634,10 +1640,6 @@ def get_driver(
16341640 if headless2 and browser_name == constants .Browser .FIREFOX :
16351641 headless2 = False # Only for Chromium
16361642 headless = True
1637- if not hasattr (sb_config , "headless" ):
1638- sb_config .headless = headless
1639- if not hasattr (sb_config , "headless2" ):
1640- sb_config .headless2 = headless2
16411643 if (
16421644 binary_location
16431645 and isinstance (binary_location , str )
@@ -4035,6 +4037,8 @@ def get_local_driver(
40354037 driver , * args , ** kwargs
40364038 )
40374039 )
4040+ driver ._is_hidden = (headless or headless2 )
4041+ driver ._is_using_uc = True
40384042 if mobile_emulator :
40394043 uc_metrics = {}
40404044 if (
0 commit comments