@@ -389,7 +389,9 @@ def uc_special_open_if_cf(
389
389
driver .execute_script ('window.open("%s","_blank");' % url )
390
390
driver .close ()
391
391
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
+ )
393
395
uc_metrics = {}
394
396
if (
395
397
isinstance (device_width , int )
@@ -419,7 +421,9 @@ def uc_special_open_if_cf(
419
421
except Exception :
420
422
pass
421
423
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
+ )
423
427
else :
424
428
driver .default_get (url ) # The original one
425
429
else :
@@ -450,7 +454,7 @@ def uc_open_with_tab(driver, url):
450
454
with driver :
451
455
driver .execute_script ('window.open("%s","_blank");' % url )
452
456
driver .close ()
453
- driver . switch_to . window (driver .window_handles [- 1 ])
457
+ page_actions . switch_to_window (driver , driver .window_handles [- 1 ], 2 )
454
458
else :
455
459
driver .default_get (url ) # The original one
456
460
return None
@@ -476,10 +480,14 @@ def uc_open_with_reconnect(driver, url, reconnect_time=None):
476
480
driver .reconnect (reconnect_time )
477
481
time .sleep (0.004 )
478
482
try :
479
- driver .switch_to .window (driver .window_handles [- 1 ])
483
+ page_actions .switch_to_window (
484
+ driver , driver .window_handles [- 1 ], 2
485
+ )
480
486
except InvalidSessionIdException :
481
487
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
+ )
483
491
else :
484
492
driver .default_get (url ) # The original one
485
493
return None
@@ -546,17 +554,17 @@ def uc_click(
546
554
driver .reconnect (reconnect_time )
547
555
548
556
549
- def verify_pyautogui_has_a_headed_browser ():
557
+ def verify_pyautogui_has_a_headed_browser (driver ):
550
558
"""PyAutoGUI requires a headed browser so that it can
551
559
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 :
553
561
raise Exception (
554
562
"PyAutoGUI can't be used in headless mode!"
555
563
)
556
564
557
565
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 )
560
568
pip_find_lock = fasteners .InterProcessLock (
561
569
constants .PipInstall .FINDLOCK
562
570
)
@@ -608,7 +616,7 @@ def get_configured_pyautogui(pyautogui_copy):
608
616
609
617
610
618
def uc_gui_press_key (driver , key ):
611
- install_pyautogui_if_missing ()
619
+ install_pyautogui_if_missing (driver )
612
620
import pyautogui
613
621
pyautogui = get_configured_pyautogui (pyautogui )
614
622
gui_lock = fasteners .InterProcessLock (
@@ -619,7 +627,7 @@ def uc_gui_press_key(driver, key):
619
627
620
628
621
629
def uc_gui_press_keys (driver , keys ):
622
- install_pyautogui_if_missing ()
630
+ install_pyautogui_if_missing (driver )
623
631
import pyautogui
624
632
pyautogui = get_configured_pyautogui (pyautogui )
625
633
gui_lock = fasteners .InterProcessLock (
@@ -631,7 +639,7 @@ def uc_gui_press_keys(driver, keys):
631
639
632
640
633
641
def uc_gui_write (driver , text ):
634
- install_pyautogui_if_missing ()
642
+ install_pyautogui_if_missing (driver )
635
643
import pyautogui
636
644
pyautogui = get_configured_pyautogui (pyautogui )
637
645
gui_lock = fasteners .InterProcessLock (
@@ -648,7 +656,7 @@ def uc_gui_handle_cf(driver, frame="iframe"):
648
656
and 'aria-label="Cloudflare"' not in source
649
657
):
650
658
return
651
- install_pyautogui_if_missing ()
659
+ install_pyautogui_if_missing (driver )
652
660
import pyautogui
653
661
pyautogui = get_configured_pyautogui (pyautogui )
654
662
gui_lock = fasteners .InterProcessLock (
@@ -664,9 +672,7 @@ def uc_gui_handle_cf(driver, frame="iframe"):
664
672
if not is_in_frame :
665
673
# Make sure the window is on top
666
674
page_actions .switch_to_window (
667
- driver ,
668
- driver .current_window_handle ,
669
- timeout = settings .SMALL_TIMEOUT ,
675
+ driver , driver .current_window_handle , 2
670
676
)
671
677
if not is_in_frame or needs_switch :
672
678
# Currently not in frame (or nested frame outside CF one)
@@ -1634,10 +1640,6 @@ def get_driver(
1634
1640
if headless2 and browser_name == constants .Browser .FIREFOX :
1635
1641
headless2 = False # Only for Chromium
1636
1642
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
1641
1643
if (
1642
1644
binary_location
1643
1645
and isinstance (binary_location , str )
@@ -4035,6 +4037,8 @@ def get_local_driver(
4035
4037
driver , * args , ** kwargs
4036
4038
)
4037
4039
)
4040
+ driver ._is_hidden = (headless or headless2 )
4041
+ driver ._is_using_uc = True
4038
4042
if mobile_emulator :
4039
4043
uc_metrics = {}
4040
4044
if (
0 commit comments