seleniumbase 4.30.8__py3-none-any.whl → 4.31.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sbase/__init__.py +1 -0
 - seleniumbase/__init__.py +2 -3
 - seleniumbase/__version__.py +1 -1
 - seleniumbase/behave/behave_sb.py +47 -9
 - seleniumbase/config/settings.py +4 -0
 - seleniumbase/console_scripts/sb_behave_gui.py +5 -5
 - seleniumbase/console_scripts/sb_caseplans.py +6 -6
 - seleniumbase/console_scripts/sb_commander.py +5 -5
 - seleniumbase/console_scripts/sb_install.py +10 -2
 - seleniumbase/console_scripts/sb_recorder.py +4 -4
 - seleniumbase/core/browser_launcher.py +138 -103
 - seleniumbase/core/mysql.py +1 -4
 - seleniumbase/core/recorder_helper.py +24 -5
 - seleniumbase/core/sb_driver.py +2 -3
 - seleniumbase/core/settings_parser.py +4 -0
 - seleniumbase/fixtures/base_case.py +307 -492
 - seleniumbase/fixtures/js_utils.py +19 -52
 - seleniumbase/fixtures/page_actions.py +3 -6
 - seleniumbase/fixtures/page_utils.py +20 -58
 - seleniumbase/plugins/base_plugin.py +2 -3
 - seleniumbase/plugins/driver_manager.py +169 -3
 - seleniumbase/plugins/pytest_plugin.py +34 -21
 - seleniumbase/plugins/sb_manager.py +170 -3
 - seleniumbase/plugins/selenium_plugin.py +52 -6
 - seleniumbase/undetected/__init__.py +13 -38
 - seleniumbase/undetected/dprocess.py +4 -6
 - seleniumbase/undetected/options.py +3 -6
 - seleniumbase/undetected/patcher.py +2 -3
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/METADATA +108 -123
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/RECORD +34 -45
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/WHEEL +1 -1
 - sbase/ReadMe.txt +0 -2
 - seleniumbase/ReadMe.md +0 -25
 - seleniumbase/common/ReadMe.md +0 -71
 - seleniumbase/console_scripts/ReadMe.md +0 -734
 - seleniumbase/drivers/ReadMe.md +0 -27
 - seleniumbase/extensions/ReadMe.md +0 -12
 - seleniumbase/masterqa/ReadMe.md +0 -61
 - seleniumbase/resources/ReadMe.md +0 -31
 - seleniumbase/resources/favicon.ico +0 -0
 - seleniumbase/utilities/selenium_grid/ReadMe.md +0 -84
 - seleniumbase/utilities/selenium_ide/ReadMe.md +0 -111
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/LICENSE +0 -0
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/entry_points.txt +0 -0
 - {seleniumbase-4.30.8.dist-info → seleniumbase-4.31.0.dist-info}/top_level.txt +0 -0
 
| 
         @@ -9,6 +9,7 @@ import time 
     | 
|
| 
       9 
9 
     | 
    
         
             
            import types
         
     | 
| 
       10 
10 
     | 
    
         
             
            import urllib3
         
     | 
| 
       11 
11 
     | 
    
         
             
            import warnings
         
     | 
| 
      
 12 
     | 
    
         
            +
            from contextlib import suppress
         
     | 
| 
       12 
13 
     | 
    
         
             
            from selenium import webdriver
         
     | 
| 
       13 
14 
     | 
    
         
             
            from selenium.common.exceptions import ElementClickInterceptedException
         
     | 
| 
       14 
15 
     | 
    
         
             
            from selenium.common.exceptions import InvalidSessionIdException
         
     | 
| 
         @@ -277,7 +278,7 @@ def chromedriver_on_path(): 
     | 
|
| 
       277 
278 
     | 
    
         
             
            def get_uc_driver_version(full=False):
         
     | 
| 
       278 
279 
     | 
    
         
             
                uc_driver_version = None
         
     | 
| 
       279 
280 
     | 
    
         
             
                if os.path.exists(LOCAL_UC_DRIVER):
         
     | 
| 
       280 
     | 
    
         
            -
                     
     | 
| 
      
 281 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       281 
282 
     | 
    
         
             
                        output = subprocess.check_output(
         
     | 
| 
       282 
283 
     | 
    
         
             
                            '"%s" --version' % LOCAL_UC_DRIVER, shell=True
         
     | 
| 
       283 
284 
     | 
    
         
             
                        )
         
     | 
| 
         @@ -292,8 +293,6 @@ def get_uc_driver_version(full=False): 
     | 
|
| 
       292 
293 
     | 
    
         
             
                                uc_driver_version = full_version
         
     | 
| 
       293 
294 
     | 
    
         
             
                            else:
         
     | 
| 
       294 
295 
     | 
    
         
             
                                uc_driver_version = output
         
     | 
| 
       295 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       296 
     | 
    
         
            -
                        pass
         
     | 
| 
       297 
296 
     | 
    
         
             
                return uc_driver_version
         
     | 
| 
       298 
297 
     | 
    
         | 
| 
       299 
298 
     | 
    
         | 
| 
         @@ -372,7 +371,7 @@ def uc_special_open_if_cf( 
     | 
|
| 
       372 
371 
     | 
    
         
             
            ):
         
     | 
| 
       373 
372 
     | 
    
         
             
                if url.startswith("http:") or url.startswith("https:"):
         
     | 
| 
       374 
373 
     | 
    
         
             
                    special = False
         
     | 
| 
       375 
     | 
    
         
            -
                     
     | 
| 
      
 374 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       376 
375 
     | 
    
         
             
                        req_get = requests_get(url, proxy_string)
         
     | 
| 
       377 
376 
     | 
    
         
             
                        status_str = str(req_get.status_code)
         
     | 
| 
       378 
377 
     | 
    
         
             
                        if (
         
     | 
| 
         @@ -384,8 +383,6 @@ def uc_special_open_if_cf( 
     | 
|
| 
       384 
383 
     | 
    
         
             
                            special = True
         
     | 
| 
       385 
384 
     | 
    
         
             
                            if status_str == "403" or status_str == "429":
         
     | 
| 
       386 
385 
     | 
    
         
             
                                time.sleep(0.06)  # Forbidden / Blocked! (Wait first!)
         
     | 
| 
       387 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       388 
     | 
    
         
            -
                        pass
         
     | 
| 
       389 
386 
     | 
    
         
             
                    if special:
         
     | 
| 
       390 
387 
     | 
    
         
             
                        time.sleep(0.05)
         
     | 
| 
       391 
388 
     | 
    
         
             
                        with driver:
         
     | 
| 
         @@ -416,13 +413,11 @@ def uc_special_open_if_cf( 
     | 
|
| 
       416 
413 
     | 
    
         
             
                                        "mobile": True
         
     | 
| 
       417 
414 
     | 
    
         
             
                                    }
         
     | 
| 
       418 
415 
     | 
    
         
             
                                )
         
     | 
| 
       419 
     | 
    
         
            -
                                 
     | 
| 
      
 416 
     | 
    
         
            +
                                with suppress(Exception):
         
     | 
| 
       420 
417 
     | 
    
         
             
                                    driver.execute_cdp_cmd(
         
     | 
| 
       421 
418 
     | 
    
         
             
                                        'Emulation.setDeviceMetricsOverride',
         
     | 
| 
       422 
419 
     | 
    
         
             
                                        set_device_metrics_override
         
     | 
| 
       423 
420 
     | 
    
         
             
                                    )
         
     | 
| 
       424 
     | 
    
         
            -
                                except Exception:
         
     | 
| 
       425 
     | 
    
         
            -
                                    pass
         
     | 
| 
       426 
421 
     | 
    
         
             
                        if not mobile_emulator:
         
     | 
| 
       427 
422 
     | 
    
         
             
                            page_actions.switch_to_window(
         
     | 
| 
       428 
423 
     | 
    
         
             
                                driver, driver.window_handles[-1], 2
         
     | 
| 
         @@ -529,13 +524,11 @@ def uc_click( 
     | 
|
| 
       529 
524 
     | 
    
         
             
                timeout=settings.SMALL_TIMEOUT,
         
     | 
| 
       530 
525 
     | 
    
         
             
                reconnect_time=None,
         
     | 
| 
       531 
526 
     | 
    
         
             
            ):
         
     | 
| 
       532 
     | 
    
         
            -
                 
     | 
| 
      
 527 
     | 
    
         
            +
                with suppress(Exception):
         
     | 
| 
       533 
528 
     | 
    
         
             
                    rct = float(by)  # Add shortcut: driver.uc_click(selector, RCT)
         
     | 
| 
       534 
529 
     | 
    
         
             
                    if not reconnect_time:
         
     | 
| 
       535 
530 
     | 
    
         
             
                        reconnect_time = rct
         
     | 
| 
       536 
531 
     | 
    
         
             
                    by = "css selector"
         
     | 
| 
       537 
     | 
    
         
            -
                except Exception:
         
     | 
| 
       538 
     | 
    
         
            -
                    pass
         
     | 
| 
       539 
532 
     | 
    
         
             
                element = driver.wait_for_selector(selector, by=by, timeout=timeout)
         
     | 
| 
       540 
533 
     | 
    
         
             
                tag_name = element.tag_name
         
     | 
| 
       541 
534 
     | 
    
         
             
                if not tag_name == "span" and not tag_name == "input":  # Must be "visible"
         
     | 
| 
         @@ -574,7 +567,7 @@ def install_pyautogui_if_missing(driver): 
     | 
|
| 
       574 
567 
     | 
    
         
             
                with pip_find_lock:  # Prevent issues with multiple processes
         
     | 
| 
       575 
568 
     | 
    
         
             
                    try:
         
     | 
| 
       576 
569 
     | 
    
         
             
                        import pyautogui
         
     | 
| 
       577 
     | 
    
         
            -
                         
     | 
| 
      
 570 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       578 
571 
     | 
    
         
             
                            use_pyautogui_ver = constants.PyAutoGUI.VER
         
     | 
| 
       579 
572 
     | 
    
         
             
                            if pyautogui.__version__ != use_pyautogui_ver:
         
     | 
| 
       580 
573 
     | 
    
         
             
                                del pyautogui
         
     | 
| 
         @@ -582,8 +575,6 @@ def install_pyautogui_if_missing(driver): 
     | 
|
| 
       582 
575 
     | 
    
         
             
                                    "pyautogui", version=use_pyautogui_ver
         
     | 
| 
       583 
576 
     | 
    
         
             
                                )
         
     | 
| 
       584 
577 
     | 
    
         
             
                                import pyautogui
         
     | 
| 
       585 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       586 
     | 
    
         
            -
                            pass
         
     | 
| 
       587 
578 
     | 
    
         
             
                    except Exception:
         
     | 
| 
       588 
579 
     | 
    
         
             
                        print("\nPyAutoGUI required! Installing now...")
         
     | 
| 
       589 
580 
     | 
    
         
             
                        shared_utils.pip_install(
         
     | 
| 
         @@ -602,16 +593,32 @@ def install_pyautogui_if_missing(driver): 
     | 
|
| 
       602 
593 
     | 
    
         
             
                                and not (sb_config.headless or sb_config.headless2)
         
     | 
| 
       603 
594 
     | 
    
         
             
                            ):
         
     | 
| 
       604 
595 
     | 
    
         
             
                                from sbvirtualdisplay import Display
         
     | 
| 
       605 
     | 
    
         
            -
                                 
     | 
| 
      
 596 
     | 
    
         
            +
                                xvfb_width = 1366
         
     | 
| 
      
 597 
     | 
    
         
            +
                                xvfb_height = 768
         
     | 
| 
      
 598 
     | 
    
         
            +
                                if (
         
     | 
| 
      
 599 
     | 
    
         
            +
                                    hasattr(sb_config, "_xvfb_width")
         
     | 
| 
      
 600 
     | 
    
         
            +
                                    and sb_config._xvfb_width
         
     | 
| 
      
 601 
     | 
    
         
            +
                                    and isinstance(sb_config._xvfb_width, int)
         
     | 
| 
      
 602 
     | 
    
         
            +
                                    and hasattr(sb_config, "_xvfb_height")
         
     | 
| 
      
 603 
     | 
    
         
            +
                                    and sb_config._xvfb_height
         
     | 
| 
      
 604 
     | 
    
         
            +
                                    and isinstance(sb_config._xvfb_height, int)
         
     | 
| 
      
 605 
     | 
    
         
            +
                                ):
         
     | 
| 
      
 606 
     | 
    
         
            +
                                    xvfb_width = sb_config._xvfb_width
         
     | 
| 
      
 607 
     | 
    
         
            +
                                    xvfb_height = sb_config._xvfb_height
         
     | 
| 
      
 608 
     | 
    
         
            +
                                    if xvfb_width < 1024:
         
     | 
| 
      
 609 
     | 
    
         
            +
                                        xvfb_width = 1024
         
     | 
| 
      
 610 
     | 
    
         
            +
                                    sb_config._xvfb_width = xvfb_width
         
     | 
| 
      
 611 
     | 
    
         
            +
                                    if xvfb_height < 768:
         
     | 
| 
      
 612 
     | 
    
         
            +
                                        xvfb_height = 768
         
     | 
| 
      
 613 
     | 
    
         
            +
                                    sb_config._xvfb_height = xvfb_height
         
     | 
| 
      
 614 
     | 
    
         
            +
                                with suppress(Exception):
         
     | 
| 
       606 
615 
     | 
    
         
             
                                    xvfb_display = Display(
         
     | 
| 
       607 
616 
     | 
    
         
             
                                        visible=True,
         
     | 
| 
       608 
     | 
    
         
            -
                                        size=( 
     | 
| 
      
 617 
     | 
    
         
            +
                                        size=(xvfb_width, xvfb_height),
         
     | 
| 
       609 
618 
     | 
    
         
             
                                        backend="xvfb",
         
     | 
| 
       610 
619 
     | 
    
         
             
                                        use_xauth=True,
         
     | 
| 
       611 
620 
     | 
    
         
             
                                    )
         
     | 
| 
       612 
621 
     | 
    
         
             
                                    xvfb_display.start()
         
     | 
| 
       613 
     | 
    
         
            -
                                except Exception:
         
     | 
| 
       614 
     | 
    
         
            -
                                    pass
         
     | 
| 
       615 
622 
     | 
    
         | 
| 
       616 
623 
     | 
    
         | 
| 
       617 
624 
     | 
    
         
             
            def get_configured_pyautogui(pyautogui_copy):
         
     | 
| 
         @@ -778,12 +785,10 @@ def uc_gui_click_x_y(driver, x, y, timeframe=0.25): 
     | 
|
| 
       778 
785 
     | 
    
         
             
                        y = y * width_ratio
         
     | 
| 
       779 
786 
     | 
    
         
             
                        _uc_gui_click_x_y(driver, x, y, timeframe=timeframe, uc_lock=False)
         
     | 
| 
       780 
787 
     | 
    
         
             
                        return
         
     | 
| 
       781 
     | 
    
         
            -
                     
     | 
| 
      
 788 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       782 
789 
     | 
    
         
             
                        page_actions.switch_to_window(
         
     | 
| 
       783 
790 
     | 
    
         
             
                            driver, driver.current_window_handle, 2, uc_lock=False
         
     | 
| 
       784 
791 
     | 
    
         
             
                        )
         
     | 
| 
       785 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       786 
     | 
    
         
            -
                        pass
         
     | 
| 
       787 
792 
     | 
    
         
             
                    _uc_gui_click_x_y(driver, x, y, timeframe=timeframe, uc_lock=False)
         
     | 
| 
       788 
793 
     | 
    
         | 
| 
       789 
794 
     | 
    
         | 
| 
         @@ -986,10 +991,8 @@ def _uc_gui_click_captcha( 
     | 
|
| 
       986 
991 
     | 
    
         
             
                            driver.uc_open_with_disconnect(driver.current_url, 3.8)
         
     | 
| 
       987 
992 
     | 
    
         
             
                        else:
         
     | 
| 
       988 
993 
     | 
    
         
             
                            driver.disconnect()
         
     | 
| 
       989 
     | 
    
         
            -
                         
     | 
| 
       990 
     | 
    
         
            -
                            _uc_gui_click_x_y(driver, x, y, timeframe=0. 
     | 
| 
       991 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       992 
     | 
    
         
            -
                            pass
         
     | 
| 
      
 994 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
      
 995 
     | 
    
         
            +
                            _uc_gui_click_x_y(driver, x, y, timeframe=0.32)
         
     | 
| 
       993 
996 
     | 
    
         
             
                reconnect_time = (float(constants.UC.RECONNECT_TIME) / 2.0) + 0.6
         
     | 
| 
       994 
997 
     | 
    
         
             
                if IS_LINUX:
         
     | 
| 
       995 
998 
     | 
    
         
             
                    reconnect_time = constants.UC.RECONNECT_TIME + 0.2
         
     | 
| 
         @@ -1031,12 +1034,12 @@ def _uc_gui_click_captcha( 
     | 
|
| 
       1031 
1034 
     | 
    
         
             
                                return
         
     | 
| 
       1032 
1035 
     | 
    
         
             
                        if blind:
         
     | 
| 
       1033 
1036 
     | 
    
         
             
                            driver.uc_open_with_disconnect(driver.current_url, 3.8)
         
     | 
| 
       1034 
     | 
    
         
            -
                            _uc_gui_click_x_y(driver, x, y, timeframe= 
     | 
| 
      
 1037 
     | 
    
         
            +
                            _uc_gui_click_x_y(driver, x, y, timeframe=0.32)
         
     | 
| 
       1035 
1038 
     | 
    
         
             
                        else:
         
     | 
| 
       1036 
1039 
     | 
    
         
             
                            driver.uc_open_with_reconnect(driver.current_url, 3.8)
         
     | 
| 
       1037 
1040 
     | 
    
         
             
                            if _on_a_captcha_page(driver):
         
     | 
| 
       1038 
1041 
     | 
    
         
             
                                driver.disconnect()
         
     | 
| 
       1039 
     | 
    
         
            -
                                _uc_gui_click_x_y(driver, x, y, timeframe= 
     | 
| 
      
 1042 
     | 
    
         
            +
                                _uc_gui_click_x_y(driver, x, y, timeframe=0.32)
         
     | 
| 
       1040 
1043 
     | 
    
         
             
                    driver.reconnect(reconnect_time)
         
     | 
| 
       1041 
1044 
     | 
    
         | 
| 
       1042 
1045 
     | 
    
         | 
| 
         @@ -1216,13 +1219,11 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None): 
     | 
|
| 
       1216 
1219 
     | 
    
         
             
                        and sb_config._saved_cf_tab_count
         
     | 
| 
       1217 
1220 
     | 
    
         
             
                    ):
         
     | 
| 
       1218 
1221 
     | 
    
         
             
                        driver.uc_open_with_disconnect(driver.current_url, 3.8)
         
     | 
| 
       1219 
     | 
    
         
            -
                         
     | 
| 
      
 1222 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       1220 
1223 
     | 
    
         
             
                            for i in range(sb_config._saved_cf_tab_count):
         
     | 
| 
       1221 
1224 
     | 
    
         
             
                                pyautogui.press("\t")
         
     | 
| 
       1222 
1225 
     | 
    
         
             
                                time.sleep(0.027)
         
     | 
| 
       1223 
1226 
     | 
    
         
             
                            pyautogui.press(" ")
         
     | 
| 
       1224 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       1225 
     | 
    
         
            -
                            pass
         
     | 
| 
       1226 
1227 
     | 
    
         
             
                    else:
         
     | 
| 
       1227 
1228 
     | 
    
         
             
                        driver.disconnect()
         
     | 
| 
       1228 
1229 
     | 
    
         
             
                        pyautogui.press(" ")
         
     | 
| 
         @@ -1669,18 +1670,49 @@ def _set_chrome_options( 
     | 
|
| 
       1669 
1670 
     | 
    
         
             
                    chrome_options.add_experimental_option(
         
     | 
| 
       1670 
1671 
     | 
    
         
             
                        "mobileEmulation", emulator_settings
         
     | 
| 
       1671 
1672 
     | 
    
         
             
                    )
         
     | 
| 
      
 1673 
     | 
    
         
            +
                # Handle Window Position
         
     | 
| 
      
 1674 
     | 
    
         
            +
                if (headless or headless2) and IS_WINDOWS:
         
     | 
| 
      
 1675 
     | 
    
         
            +
                    # https://stackoverflow.com/a/78999088/7058266
         
     | 
| 
      
 1676 
     | 
    
         
            +
                    chrome_options.add_argument("--window-position=-2400,-2400")
         
     | 
| 
      
 1677 
     | 
    
         
            +
                else:
         
     | 
| 
      
 1678 
     | 
    
         
            +
                    if (
         
     | 
| 
      
 1679 
     | 
    
         
            +
                        hasattr(settings, "WINDOW_START_X")
         
     | 
| 
      
 1680 
     | 
    
         
            +
                        and isinstance(settings.WINDOW_START_X, int)
         
     | 
| 
      
 1681 
     | 
    
         
            +
                        and hasattr(settings, "WINDOW_START_Y")
         
     | 
| 
      
 1682 
     | 
    
         
            +
                        and isinstance(settings.WINDOW_START_Y, int)
         
     | 
| 
      
 1683 
     | 
    
         
            +
                    ):
         
     | 
| 
      
 1684 
     | 
    
         
            +
                        chrome_options.add_argument(
         
     | 
| 
      
 1685 
     | 
    
         
            +
                            "--window-position=%s,%s" % (
         
     | 
| 
      
 1686 
     | 
    
         
            +
                                settings.WINDOW_START_X, settings.WINDOW_START_Y
         
     | 
| 
      
 1687 
     | 
    
         
            +
                            )
         
     | 
| 
      
 1688 
     | 
    
         
            +
                        )
         
     | 
| 
      
 1689 
     | 
    
         
            +
                # Handle Window Size
         
     | 
| 
       1672 
1690 
     | 
    
         
             
                if headless or headless2:
         
     | 
| 
       1673 
     | 
    
         
            -
                     
     | 
| 
       1674 
     | 
    
         
            -
                        " 
     | 
| 
       1675 
     | 
    
         
            -
             
     | 
| 
      
 1691 
     | 
    
         
            +
                    if (
         
     | 
| 
      
 1692 
     | 
    
         
            +
                        hasattr(settings, "HEADLESS_START_WIDTH")
         
     | 
| 
      
 1693 
     | 
    
         
            +
                        and isinstance(settings.HEADLESS_START_WIDTH, int)
         
     | 
| 
      
 1694 
     | 
    
         
            +
                        and hasattr(settings, "HEADLESS_START_HEIGHT")
         
     | 
| 
      
 1695 
     | 
    
         
            +
                        and isinstance(settings.HEADLESS_START_HEIGHT, int)
         
     | 
| 
      
 1696 
     | 
    
         
            +
                    ):
         
     | 
| 
      
 1697 
     | 
    
         
            +
                        chrome_options.add_argument(
         
     | 
| 
      
 1698 
     | 
    
         
            +
                            "--window-size=%s,%s" % (
         
     | 
| 
      
 1699 
     | 
    
         
            +
                                settings.HEADLESS_START_WIDTH,
         
     | 
| 
      
 1700 
     | 
    
         
            +
                                settings.HEADLESS_START_HEIGHT,
         
     | 
| 
      
 1701 
     | 
    
         
            +
                            )
         
     | 
| 
       1676 
1702 
     | 
    
         
             
                        )
         
     | 
| 
       1677 
     | 
    
         
            -
                    )
         
     | 
| 
       1678 
1703 
     | 
    
         
             
                else:
         
     | 
| 
       1679 
     | 
    
         
            -
                     
     | 
| 
       1680 
     | 
    
         
            -
                        " 
     | 
| 
       1681 
     | 
    
         
            -
             
     | 
| 
      
 1704 
     | 
    
         
            +
                    if (
         
     | 
| 
      
 1705 
     | 
    
         
            +
                        hasattr(settings, "CHROME_START_WIDTH")
         
     | 
| 
      
 1706 
     | 
    
         
            +
                        and isinstance(settings.CHROME_START_WIDTH, int)
         
     | 
| 
      
 1707 
     | 
    
         
            +
                        and hasattr(settings, "CHROME_START_HEIGHT")
         
     | 
| 
      
 1708 
     | 
    
         
            +
                        and isinstance(settings.CHROME_START_HEIGHT, int)
         
     | 
| 
      
 1709 
     | 
    
         
            +
                    ):
         
     | 
| 
      
 1710 
     | 
    
         
            +
                        chrome_options.add_argument(
         
     | 
| 
      
 1711 
     | 
    
         
            +
                            "--window-size=%s,%s" % (
         
     | 
| 
      
 1712 
     | 
    
         
            +
                                settings.CHROME_START_WIDTH,
         
     | 
| 
      
 1713 
     | 
    
         
            +
                                settings.CHROME_START_HEIGHT,
         
     | 
| 
      
 1714 
     | 
    
         
            +
                            )
         
     | 
| 
       1682 
1715 
     | 
    
         
             
                        )
         
     | 
| 
       1683 
     | 
    
         
            -
                    )
         
     | 
| 
       1684 
1716 
     | 
    
         
             
                if (
         
     | 
| 
       1685 
1717 
     | 
    
         
             
                    not proxy_auth
         
     | 
| 
       1686 
1718 
     | 
    
         
             
                    and not disable_csp
         
     | 
| 
         @@ -1858,8 +1890,12 @@ def _set_chrome_options( 
     | 
|
| 
       1858 
1890 
     | 
    
         
             
                                binary_location = binary_loc
         
     | 
| 
       1859 
1891 
     | 
    
         
             
                extra_disabled_features = []
         
     | 
| 
       1860 
1892 
     | 
    
         
             
                if chromium_arg:
         
     | 
| 
       1861 
     | 
    
         
            -
                    # Can be a comma-separated list of Chromium args
         
     | 
| 
       1862 
     | 
    
         
            -
                    chromium_arg_list =  
     | 
| 
      
 1893 
     | 
    
         
            +
                    # Can be a comma-separated list of Chromium args or a list
         
     | 
| 
      
 1894 
     | 
    
         
            +
                    chromium_arg_list = None
         
     | 
| 
      
 1895 
     | 
    
         
            +
                    if isinstance(chromium_arg, (list, tuple)):
         
     | 
| 
      
 1896 
     | 
    
         
            +
                        chromium_arg_list = chromium_arg
         
     | 
| 
      
 1897 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 1898 
     | 
    
         
            +
                        chromium_arg_list = chromium_arg.split(",")
         
     | 
| 
       1863 
1899 
     | 
    
         
             
                    for chromium_arg_item in chromium_arg_list:
         
     | 
| 
       1864 
1900 
     | 
    
         
             
                        chromium_arg_item = chromium_arg_item.strip()
         
     | 
| 
       1865 
1901 
     | 
    
         
             
                        if not chromium_arg_item.startswith("--"):
         
     | 
| 
         @@ -1868,13 +1904,11 @@ def _set_chrome_options( 
     | 
|
| 
       1868 
1904 
     | 
    
         
             
                            else:
         
     | 
| 
       1869 
1905 
     | 
    
         
             
                                chromium_arg_item = "--" + chromium_arg_item
         
     | 
| 
       1870 
1906 
     | 
    
         
             
                        if "remote-debugging-port=" in chromium_arg_item:
         
     | 
| 
       1871 
     | 
    
         
            -
                             
     | 
| 
      
 1907 
     | 
    
         
            +
                            with suppress(Exception):
         
     | 
| 
       1872 
1908 
     | 
    
         
             
                                # Extra processing for UC Mode
         
     | 
| 
       1873 
1909 
     | 
    
         
             
                                chrome_options._remote_debugging_port = int(
         
     | 
| 
       1874 
1910 
     | 
    
         
             
                                    chromium_arg_item.split("remote-debugging-port=")[1]
         
     | 
| 
       1875 
1911 
     | 
    
         
             
                                )
         
     | 
| 
       1876 
     | 
    
         
            -
                            except Exception:
         
     | 
| 
       1877 
     | 
    
         
            -
                                pass
         
     | 
| 
       1878 
1912 
     | 
    
         
             
                        if "set-binary" in chromium_arg_item and not binary_location:
         
     | 
| 
       1879 
1913 
     | 
    
         
             
                            br_app = "google-chrome"
         
     | 
| 
       1880 
1914 
     | 
    
         
             
                            binary_loc = detect_b_ver.get_binary_location(
         
     | 
| 
         @@ -2526,14 +2560,12 @@ def get_remote_driver( 
     | 
|
| 
       2526 
2560 
     | 
    
         
             
                        try:
         
     | 
| 
       2527 
2561 
     | 
    
         
             
                            from seleniumwire import webdriver
         
     | 
| 
       2528 
2562 
     | 
    
         
             
                            import blinker
         
     | 
| 
       2529 
     | 
    
         
            -
                             
     | 
| 
      
 2563 
     | 
    
         
            +
                            with suppress(Exception):
         
     | 
| 
       2530 
2564 
     | 
    
         
             
                                use_blinker_ver = constants.SeleniumWire.BLINKER_VER
         
     | 
| 
       2531 
2565 
     | 
    
         
             
                                if blinker.__version__ != use_blinker_ver:
         
     | 
| 
       2532 
2566 
     | 
    
         
             
                                    shared_utils.pip_install(
         
     | 
| 
       2533 
2567 
     | 
    
         
             
                                        "blinker", version=use_blinker_ver
         
     | 
| 
       2534 
2568 
     | 
    
         
             
                                    )
         
     | 
| 
       2535 
     | 
    
         
            -
                            except Exception:
         
     | 
| 
       2536 
     | 
    
         
            -
                                pass
         
     | 
| 
       2537 
2569 
     | 
    
         
             
                            del blinker
         
     | 
| 
       2538 
2570 
     | 
    
         
             
                        except Exception:
         
     | 
| 
       2539 
2571 
     | 
    
         
             
                            shared_utils.pip_install(
         
     | 
| 
         @@ -2957,14 +2989,12 @@ def get_local_driver( 
     | 
|
| 
       2957 
2989 
     | 
    
         
             
                        try:
         
     | 
| 
       2958 
2990 
     | 
    
         
             
                            from seleniumwire import webdriver
         
     | 
| 
       2959 
2991 
     | 
    
         
             
                            import blinker
         
     | 
| 
       2960 
     | 
    
         
            -
                             
     | 
| 
      
 2992 
     | 
    
         
            +
                            with suppress(Exception):
         
     | 
| 
       2961 
2993 
     | 
    
         
             
                                use_blinker_ver = constants.SeleniumWire.BLINKER_VER
         
     | 
| 
       2962 
2994 
     | 
    
         
             
                                if blinker.__version__ != use_blinker_ver:
         
     | 
| 
       2963 
2995 
     | 
    
         
             
                                    shared_utils.pip_install(
         
     | 
| 
       2964 
2996 
     | 
    
         
             
                                        "blinker", version=use_blinker_ver
         
     | 
| 
       2965 
2997 
     | 
    
         
             
                                    )
         
     | 
| 
       2966 
     | 
    
         
            -
                            except Exception:
         
     | 
| 
       2967 
     | 
    
         
            -
                                pass
         
     | 
| 
       2968 
2998 
     | 
    
         
             
                            del blinker
         
     | 
| 
       2969 
2999 
     | 
    
         
             
                        except Exception:
         
     | 
| 
       2970 
3000 
     | 
    
         
             
                            shared_utils.pip_install(
         
     | 
| 
         @@ -3255,7 +3285,7 @@ def get_local_driver( 
     | 
|
| 
       3255 
3285 
     | 
    
         
             
                    edge_driver_version = None
         
     | 
| 
       3256 
3286 
     | 
    
         
             
                    edgedriver_upgrade_needed = False
         
     | 
| 
       3257 
3287 
     | 
    
         
             
                    if os.path.exists(LOCAL_EDGEDRIVER):
         
     | 
| 
       3258 
     | 
    
         
            -
                         
     | 
| 
      
 3288 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       3259 
3289 
     | 
    
         
             
                            output = subprocess.check_output(
         
     | 
| 
       3260 
3290 
     | 
    
         
             
                                '"%s" --version' % LOCAL_EDGEDRIVER, shell=True
         
     | 
| 
       3261 
3291 
     | 
    
         
             
                            )
         
     | 
| 
         @@ -3281,8 +3311,6 @@ def get_local_driver( 
     | 
|
| 
       3281 
3311 
     | 
    
         
             
                                    edge_driver_version = output
         
     | 
| 
       3282 
3312 
     | 
    
         
             
                                if driver_version == "keep":
         
     | 
| 
       3283 
3313 
     | 
    
         
             
                                    driver_version = edge_driver_version
         
     | 
| 
       3284 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       3285 
     | 
    
         
            -
                            pass
         
     | 
| 
       3286 
3314 
     | 
    
         
             
                    use_version = find_edgedriver_version_to_use(
         
     | 
| 
       3287 
3315 
     | 
    
         
             
                        use_version, driver_version
         
     | 
| 
       3288 
3316 
     | 
    
         
             
                    )
         
     | 
| 
         @@ -3386,7 +3414,7 @@ def get_local_driver( 
     | 
|
| 
       3386 
3414 
     | 
    
         
             
                            edge_options.add_argument("--headless=new")
         
     | 
| 
       3387 
3415 
     | 
    
         
             
                    elif headless and undetectable:
         
     | 
| 
       3388 
3416 
     | 
    
         
             
                        # (For later: UC Mode doesn't support Edge now)
         
     | 
| 
       3389 
     | 
    
         
            -
                         
     | 
| 
      
 3417 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       3390 
3418 
     | 
    
         
             
                            if int(use_version) >= 109:
         
     | 
| 
       3391 
3419 
     | 
    
         
             
                                edge_options.add_argument("--headless=new")
         
     | 
| 
       3392 
3420 
     | 
    
         
             
                            elif (
         
     | 
| 
         @@ -3396,8 +3424,6 @@ def get_local_driver( 
     | 
|
| 
       3396 
3424 
     | 
    
         
             
                                edge_options.add_argument("--headless=chrome")
         
     | 
| 
       3397 
3425 
     | 
    
         
             
                            else:
         
     | 
| 
       3398 
3426 
     | 
    
         
             
                                pass  # Will need Xvfb on Linux
         
     | 
| 
       3399 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       3400 
     | 
    
         
            -
                            pass
         
     | 
| 
       3401 
3427 
     | 
    
         
             
                    elif headless:
         
     | 
| 
       3402 
3428 
     | 
    
         
             
                        if "--headless" not in edge_options.arguments:
         
     | 
| 
       3403 
3429 
     | 
    
         
             
                            edge_options.add_argument("--headless")
         
     | 
| 
         @@ -3422,20 +3448,49 @@ def get_local_driver( 
     | 
|
| 
       3422 
3448 
     | 
    
         
             
                        edge_options.add_experimental_option(
         
     | 
| 
       3423 
3449 
     | 
    
         
             
                            "mobileEmulation", emulator_settings
         
     | 
| 
       3424 
3450 
     | 
    
         
             
                        )
         
     | 
| 
      
 3451 
     | 
    
         
            +
                    # Handle Window Position
         
     | 
| 
      
 3452 
     | 
    
         
            +
                    if (headless or headless2) and IS_WINDOWS:
         
     | 
| 
      
 3453 
     | 
    
         
            +
                        # https://stackoverflow.com/a/78999088/7058266
         
     | 
| 
      
 3454 
     | 
    
         
            +
                        edge_options.add_argument("--window-position=-2400,-2400")
         
     | 
| 
      
 3455 
     | 
    
         
            +
                    else:
         
     | 
| 
      
 3456 
     | 
    
         
            +
                        if (
         
     | 
| 
      
 3457 
     | 
    
         
            +
                            hasattr(settings, "WINDOW_START_X")
         
     | 
| 
      
 3458 
     | 
    
         
            +
                            and isinstance(settings.WINDOW_START_X, int)
         
     | 
| 
      
 3459 
     | 
    
         
            +
                            and hasattr(settings, "WINDOW_START_Y")
         
     | 
| 
      
 3460 
     | 
    
         
            +
                            and isinstance(settings.WINDOW_START_Y, int)
         
     | 
| 
      
 3461 
     | 
    
         
            +
                        ):
         
     | 
| 
      
 3462 
     | 
    
         
            +
                            edge_options.add_argument(
         
     | 
| 
      
 3463 
     | 
    
         
            +
                                "--window-position=%s,%s" % (
         
     | 
| 
      
 3464 
     | 
    
         
            +
                                    settings.WINDOW_START_X, settings.WINDOW_START_Y
         
     | 
| 
      
 3465 
     | 
    
         
            +
                                )
         
     | 
| 
      
 3466 
     | 
    
         
            +
                            )
         
     | 
| 
      
 3467 
     | 
    
         
            +
                    # Handle Window Size
         
     | 
| 
       3425 
3468 
     | 
    
         
             
                    if headless or headless2:
         
     | 
| 
       3426 
     | 
    
         
            -
                         
     | 
| 
       3427 
     | 
    
         
            -
                            " 
     | 
| 
       3428 
     | 
    
         
            -
             
     | 
| 
       3429 
     | 
    
         
            -
             
     | 
| 
      
 3469 
     | 
    
         
            +
                        if (
         
     | 
| 
      
 3470 
     | 
    
         
            +
                            hasattr(settings, "HEADLESS_START_WIDTH")
         
     | 
| 
      
 3471 
     | 
    
         
            +
                            and isinstance(settings.HEADLESS_START_WIDTH, int)
         
     | 
| 
      
 3472 
     | 
    
         
            +
                            and hasattr(settings, "HEADLESS_START_HEIGHT")
         
     | 
| 
      
 3473 
     | 
    
         
            +
                            and isinstance(settings.HEADLESS_START_HEIGHT, int)
         
     | 
| 
      
 3474 
     | 
    
         
            +
                        ):
         
     | 
| 
      
 3475 
     | 
    
         
            +
                            edge_options.add_argument(
         
     | 
| 
      
 3476 
     | 
    
         
            +
                                "--window-size=%s,%s" % (
         
     | 
| 
      
 3477 
     | 
    
         
            +
                                    settings.HEADLESS_START_WIDTH,
         
     | 
| 
      
 3478 
     | 
    
         
            +
                                    settings.HEADLESS_START_HEIGHT,
         
     | 
| 
      
 3479 
     | 
    
         
            +
                                )
         
     | 
| 
       3430 
3480 
     | 
    
         
             
                            )
         
     | 
| 
       3431 
     | 
    
         
            -
                        )
         
     | 
| 
       3432 
3481 
     | 
    
         
             
                    else:
         
     | 
| 
       3433 
     | 
    
         
            -
                         
     | 
| 
       3434 
     | 
    
         
            -
                            " 
     | 
| 
       3435 
     | 
    
         
            -
             
     | 
| 
       3436 
     | 
    
         
            -
             
     | 
| 
      
 3482 
     | 
    
         
            +
                        if (
         
     | 
| 
      
 3483 
     | 
    
         
            +
                            hasattr(settings, "CHROME_START_WIDTH")
         
     | 
| 
      
 3484 
     | 
    
         
            +
                            and isinstance(settings.CHROME_START_WIDTH, int)
         
     | 
| 
      
 3485 
     | 
    
         
            +
                            and hasattr(settings, "CHROME_START_HEIGHT")
         
     | 
| 
      
 3486 
     | 
    
         
            +
                            and isinstance(settings.CHROME_START_HEIGHT, int)
         
     | 
| 
      
 3487 
     | 
    
         
            +
                        ):
         
     | 
| 
      
 3488 
     | 
    
         
            +
                            edge_options.add_argument(
         
     | 
| 
      
 3489 
     | 
    
         
            +
                                "--window-size=%s,%s" % (
         
     | 
| 
      
 3490 
     | 
    
         
            +
                                    settings.CHROME_START_WIDTH,
         
     | 
| 
      
 3491 
     | 
    
         
            +
                                    settings.CHROME_START_HEIGHT,
         
     | 
| 
      
 3492 
     | 
    
         
            +
                                )
         
     | 
| 
       3437 
3493 
     | 
    
         
             
                            )
         
     | 
| 
       3438 
     | 
    
         
            -
                        )
         
     | 
| 
       3439 
3494 
     | 
    
         
             
                    if user_data_dir and not is_using_uc(undetectable, browser_name):
         
     | 
| 
       3440 
3495 
     | 
    
         
             
                        abs_path = os.path.abspath(user_data_dir)
         
     | 
| 
       3441 
3496 
     | 
    
         
             
                        edge_options.add_argument("--user-data-dir=%s" % abs_path)
         
     | 
| 
         @@ -3569,7 +3624,11 @@ def get_local_driver( 
     | 
|
| 
       3569 
3624 
     | 
    
         
             
                    set_binary = False
         
     | 
| 
       3570 
3625 
     | 
    
         
             
                    if chromium_arg:
         
     | 
| 
       3571 
3626 
     | 
    
         
             
                        # Can be a comma-separated list of Chromium args
         
     | 
| 
       3572 
     | 
    
         
            -
                        chromium_arg_list =  
     | 
| 
      
 3627 
     | 
    
         
            +
                        chromium_arg_list = None
         
     | 
| 
      
 3628 
     | 
    
         
            +
                        if isinstance(chromium_arg, (list, tuple)):
         
     | 
| 
      
 3629 
     | 
    
         
            +
                            chromium_arg_list = chromium_arg
         
     | 
| 
      
 3630 
     | 
    
         
            +
                        else:
         
     | 
| 
      
 3631 
     | 
    
         
            +
                            chromium_arg_list = chromium_arg.split(",")
         
     | 
| 
       3573 
3632 
     | 
    
         
             
                        for chromium_arg_item in chromium_arg_list:
         
     | 
| 
       3574 
3633 
     | 
    
         
             
                            chromium_arg_item = chromium_arg_item.strip()
         
     | 
| 
       3575 
3634 
     | 
    
         
             
                            if not chromium_arg_item.startswith("--"):
         
     | 
| 
         @@ -3664,19 +3723,15 @@ def get_local_driver( 
     | 
|
| 
       3664 
3723 
     | 
    
         
             
                                constants.MultiBrowser.DRIVER_FIXING_LOCK
         
     | 
| 
       3665 
3724 
     | 
    
         
             
                            )
         
     | 
| 
       3666 
3725 
     | 
    
         
             
                            with edgedriver_fixing_lock:
         
     | 
| 
       3667 
     | 
    
         
            -
                                 
     | 
| 
      
 3726 
     | 
    
         
            +
                                with suppress(Exception):
         
     | 
| 
       3668 
3727 
     | 
    
         
             
                                    if not _was_driver_repaired():
         
     | 
| 
       3669 
3728 
     | 
    
         
             
                                        _repair_edgedriver(edge_version)
         
     | 
| 
       3670 
3729 
     | 
    
         
             
                                        _mark_driver_repaired()
         
     | 
| 
       3671 
     | 
    
         
            -
                                except Exception:
         
     | 
| 
       3672 
     | 
    
         
            -
                                    pass
         
     | 
| 
       3673 
3730 
     | 
    
         
             
                        else:
         
     | 
| 
       3674 
     | 
    
         
            -
                             
     | 
| 
      
 3731 
     | 
    
         
            +
                            with suppress(Exception):
         
     | 
| 
       3675 
3732 
     | 
    
         
             
                                if not _was_driver_repaired():
         
     | 
| 
       3676 
3733 
     | 
    
         
             
                                    _repair_edgedriver(edge_version)
         
     | 
| 
       3677 
3734 
     | 
    
         
             
                                _mark_driver_repaired()
         
     | 
| 
       3678 
     | 
    
         
            -
                            except Exception:
         
     | 
| 
       3679 
     | 
    
         
            -
                                pass
         
     | 
| 
       3680 
3735 
     | 
    
         
             
                        driver = Edge(service=service, options=edge_options)
         
     | 
| 
       3681 
3736 
     | 
    
         
             
                    return extend_driver(driver)
         
     | 
| 
       3682 
3737 
     | 
    
         
             
                elif browser_name == constants.Browser.SAFARI:
         
     | 
| 
         @@ -3828,7 +3883,7 @@ def get_local_driver( 
     | 
|
| 
       3828 
3883 
     | 
    
         
             
                        ch_driver_version = None
         
     | 
| 
       3829 
3884 
     | 
    
         
             
                        path_chromedriver = chromedriver_on_path()
         
     | 
| 
       3830 
3885 
     | 
    
         
             
                        if os.path.exists(LOCAL_CHROMEDRIVER):
         
     | 
| 
       3831 
     | 
    
         
            -
                             
     | 
| 
      
 3886 
     | 
    
         
            +
                            with suppress(Exception):
         
     | 
| 
       3832 
3887 
     | 
    
         
             
                                output = subprocess.check_output(
         
     | 
| 
       3833 
3888 
     | 
    
         
             
                                    '"%s" --version' % LOCAL_CHROMEDRIVER, shell=True
         
     | 
| 
       3834 
3889 
     | 
    
         
             
                                )
         
     | 
| 
         @@ -3842,8 +3897,6 @@ def get_local_driver( 
     | 
|
| 
       3842 
3897 
     | 
    
         
             
                                    ch_driver_version = output
         
     | 
| 
       3843 
3898 
     | 
    
         
             
                                    if driver_version == "keep":
         
     | 
| 
       3844 
3899 
     | 
    
         
             
                                        driver_version = ch_driver_version
         
     | 
| 
       3845 
     | 
    
         
            -
                            except Exception:
         
     | 
| 
       3846 
     | 
    
         
            -
                                pass
         
     | 
| 
       3847 
3900 
     | 
    
         
             
                        elif path_chromedriver:
         
     | 
| 
       3848 
3901 
     | 
    
         
             
                            try:
         
     | 
| 
       3849 
3902 
     | 
    
         
             
                                make_driver_executable_if_not(path_chromedriver)
         
     | 
| 
         @@ -3852,7 +3905,7 @@ def get_local_driver( 
     | 
|
| 
       3852 
3905 
     | 
    
         
             
                                    "\nWarning: Could not make chromedriver"
         
     | 
| 
       3853 
3906 
     | 
    
         
             
                                    " executable: %s" % e
         
     | 
| 
       3854 
3907 
     | 
    
         
             
                                )
         
     | 
| 
       3855 
     | 
    
         
            -
                             
     | 
| 
      
 3908 
     | 
    
         
            +
                            with suppress(Exception):
         
     | 
| 
       3856 
3909 
     | 
    
         
             
                                output = subprocess.check_output(
         
     | 
| 
       3857 
3910 
     | 
    
         
             
                                    '"%s" --version' % path_chromedriver, shell=True
         
     | 
| 
       3858 
3911 
     | 
    
         
             
                                )
         
     | 
| 
         @@ -3866,8 +3919,6 @@ def get_local_driver( 
     | 
|
| 
       3866 
3919 
     | 
    
         
             
                                    ch_driver_version = output
         
     | 
| 
       3867 
3920 
     | 
    
         
             
                                    if driver_version == "keep":
         
     | 
| 
       3868 
3921 
     | 
    
         
             
                                        use_version = ch_driver_version
         
     | 
| 
       3869 
     | 
    
         
            -
                            except Exception:
         
     | 
| 
       3870 
     | 
    
         
            -
                                pass
         
     | 
| 
       3871 
3922 
     | 
    
         
             
                        disable_build_check = True
         
     | 
| 
       3872 
3923 
     | 
    
         
             
                        uc_driver_version = None
         
     | 
| 
       3873 
3924 
     | 
    
         
             
                        if is_using_uc(undetectable, browser_name):
         
     | 
| 
         @@ -4060,7 +4111,7 @@ def get_local_driver( 
     | 
|
| 
       4060 
4111 
     | 
    
         
             
                                    if IS_ARM_MAC and use_uc:
         
     | 
| 
       4061 
4112 
     | 
    
         
             
                                        intel_for_uc = True  # Use Intel driver for UC Mode
         
     | 
| 
       4062 
4113 
     | 
    
         
             
                                    if os.path.exists(LOCAL_CHROMEDRIVER):
         
     | 
| 
       4063 
     | 
    
         
            -
                                         
     | 
| 
      
 4114 
     | 
    
         
            +
                                        with suppress(Exception):
         
     | 
| 
       4064 
4115 
     | 
    
         
             
                                            output = subprocess.check_output(
         
     | 
| 
       4065 
4116 
     | 
    
         
             
                                                '"%s" --version' % LOCAL_CHROMEDRIVER,
         
     | 
| 
       4066 
4117 
     | 
    
         
             
                                                shell=True,
         
     | 
| 
         @@ -4073,8 +4124,6 @@ def get_local_driver( 
     | 
|
| 
       4073 
4124 
     | 
    
         
             
                                            output = full_ch_driver_version.split(".")[0]
         
     | 
| 
       4074 
4125 
     | 
    
         
             
                                            if int(output) >= 2:
         
     | 
| 
       4075 
4126 
     | 
    
         
             
                                                ch_driver_version = output
         
     | 
| 
       4076 
     | 
    
         
            -
                                        except Exception:
         
     | 
| 
       4077 
     | 
    
         
            -
                                            pass
         
     | 
| 
       4078 
4127 
     | 
    
         
             
                                    if (
         
     | 
| 
       4079 
4128 
     | 
    
         
             
                                        (
         
     | 
| 
       4080 
4129 
     | 
    
         
             
                                            not use_uc
         
     | 
| 
         @@ -4212,7 +4261,7 @@ def get_local_driver( 
     | 
|
| 
       4212 
4261 
     | 
    
         
             
                                            chrome_options.add_argument(
         
     | 
| 
       4213 
4262 
     | 
    
         
             
                                                "--user-agent=%s" % user_agent
         
     | 
| 
       4214 
4263 
     | 
    
         
             
                                            )
         
     | 
| 
       4215 
     | 
    
         
            -
                                         
     | 
| 
      
 4264 
     | 
    
         
            +
                                        with suppress(Exception):
         
     | 
| 
       4216 
4265 
     | 
    
         
             
                                            if (
         
     | 
| 
       4217 
4266 
     | 
    
         
             
                                                (
         
     | 
| 
       4218 
4267 
     | 
    
         
             
                                                    not user_agent
         
     | 
| 
         @@ -4318,7 +4367,7 @@ def get_local_driver( 
     | 
|
| 
       4318 
4367 
     | 
    
         
             
                                                        service=service,
         
     | 
| 
       4319 
4368 
     | 
    
         
             
                                                        options=headless_options,
         
     | 
| 
       4320 
4369 
     | 
    
         
             
                                                    )
         
     | 
| 
       4321 
     | 
    
         
            -
                                                 
     | 
| 
      
 4370 
     | 
    
         
            +
                                                with suppress(Exception):
         
     | 
| 
       4322 
4371 
     | 
    
         
             
                                                    user_agent = driver.execute_script(
         
     | 
| 
       4323 
4372 
     | 
    
         
             
                                                        "return navigator.userAgent;"
         
     | 
| 
       4324 
4373 
     | 
    
         
             
                                                    )
         
     | 
| 
         @@ -4340,11 +4389,7 @@ def get_local_driver( 
     | 
|
| 
       4340 
4389 
     | 
    
         
             
                                                        "--user-agent=%s" % user_agent
         
     | 
| 
       4341 
4390 
     | 
    
         
             
                                                    )
         
     | 
| 
       4342 
4391 
     | 
    
         
             
                                                    sb_config.uc_agent_cache = user_agent
         
     | 
| 
       4343 
     | 
    
         
            -
                                                except Exception:
         
     | 
| 
       4344 
     | 
    
         
            -
                                                    pass
         
     | 
| 
       4345 
4392 
     | 
    
         
             
                                                driver.quit()
         
     | 
| 
       4346 
     | 
    
         
            -
                                        except Exception:
         
     | 
| 
       4347 
     | 
    
         
            -
                                            pass
         
     | 
| 
       4348 
4393 
     | 
    
         
             
                                        uc_path = None
         
     | 
| 
       4349 
4394 
     | 
    
         
             
                                        if os.path.exists(LOCAL_UC_DRIVER):
         
     | 
| 
       4350 
4395 
     | 
    
         
             
                                            uc_path = LOCAL_UC_DRIVER
         
     | 
| 
         @@ -4667,13 +4712,11 @@ def get_local_driver( 
     | 
|
| 
       4667 
4712 
     | 
    
         
             
                                            "mobile": True
         
     | 
| 
       4668 
4713 
     | 
    
         
             
                                        }
         
     | 
| 
       4669 
4714 
     | 
    
         
             
                                    )
         
     | 
| 
       4670 
     | 
    
         
            -
                                     
     | 
| 
      
 4715 
     | 
    
         
            +
                                    with suppress(Exception):
         
     | 
| 
       4671 
4716 
     | 
    
         
             
                                        driver.execute_cdp_cmd(
         
     | 
| 
       4672 
4717 
     | 
    
         
             
                                            'Emulation.setDeviceMetricsOverride',
         
     | 
| 
       4673 
4718 
     | 
    
         
             
                                            set_device_metrics_override
         
     | 
| 
       4674 
4719 
     | 
    
         
             
                                        )
         
     | 
| 
       4675 
     | 
    
         
            -
                                    except Exception:
         
     | 
| 
       4676 
     | 
    
         
            -
                                        pass
         
     | 
| 
       4677 
4720 
     | 
    
         
             
                            return extend_driver(driver)
         
     | 
| 
       4678 
4721 
     | 
    
         
             
                        else:  # Running headless on Linux (and not using --uc)
         
     | 
| 
       4679 
4722 
     | 
    
         
             
                            try:
         
     | 
| 
         @@ -4719,23 +4762,19 @@ def get_local_driver( 
     | 
|
| 
       4719 
4762 
     | 
    
         
             
                                        )
         
     | 
| 
       4720 
4763 
     | 
    
         
             
                                        with chromedr_fixing_lock:
         
     | 
| 
       4721 
4764 
     | 
    
         
             
                                            if not _was_driver_repaired():
         
     | 
| 
       4722 
     | 
    
         
            -
                                                 
     | 
| 
      
 4765 
     | 
    
         
            +
                                                with suppress(Exception):
         
     | 
| 
       4723 
4766 
     | 
    
         
             
                                                    _repair_chromedriver(
         
     | 
| 
       4724 
4767 
     | 
    
         
             
                                                        chrome_options, chrome_options, mcv
         
     | 
| 
       4725 
4768 
     | 
    
         
             
                                                    )
         
     | 
| 
       4726 
4769 
     | 
    
         
             
                                                    _mark_driver_repaired()
         
     | 
| 
       4727 
     | 
    
         
            -
                                                except Exception:
         
     | 
| 
       4728 
     | 
    
         
            -
                                                    pass
         
     | 
| 
       4729 
4770 
     | 
    
         
             
                                    else:
         
     | 
| 
       4730 
4771 
     | 
    
         
             
                                        if not _was_driver_repaired():
         
     | 
| 
       4731 
     | 
    
         
            -
                                             
     | 
| 
      
 4772 
     | 
    
         
            +
                                            with suppress(Exception):
         
     | 
| 
       4732 
4773 
     | 
    
         
             
                                                _repair_chromedriver(
         
     | 
| 
       4733 
4774 
     | 
    
         
             
                                                    chrome_options, chrome_options, mcv
         
     | 
| 
       4734 
4775 
     | 
    
         
             
                                                )
         
     | 
| 
       4735 
     | 
    
         
            -
                                            except Exception:
         
     | 
| 
       4736 
     | 
    
         
            -
                                                pass
         
     | 
| 
       4737 
4776 
     | 
    
         
             
                                        _mark_driver_repaired()
         
     | 
| 
       4738 
     | 
    
         
            -
                                     
     | 
| 
      
 4777 
     | 
    
         
            +
                                    with suppress(Exception):
         
     | 
| 
       4739 
4778 
     | 
    
         
             
                                        service = ChromeService(
         
     | 
| 
       4740 
4779 
     | 
    
         
             
                                            log_output=os.devnull,
         
     | 
| 
       4741 
4780 
     | 
    
         
             
                                            service_args=["--disable-build-check"],
         
     | 
| 
         @@ -4745,8 +4784,6 @@ def get_local_driver( 
     | 
|
| 
       4745 
4784 
     | 
    
         
             
                                            options=chrome_options,
         
     | 
| 
       4746 
4785 
     | 
    
         
             
                                        )
         
     | 
| 
       4747 
4786 
     | 
    
         
             
                                        return extend_driver(driver)
         
     | 
| 
       4748 
     | 
    
         
            -
                                    except Exception:
         
     | 
| 
       4749 
     | 
    
         
            -
                                        pass
         
     | 
| 
       4750 
4787 
     | 
    
         
             
                                # Use the virtual display on Linux during headless errors
         
     | 
| 
       4751 
4788 
     | 
    
         
             
                                logging.debug(
         
     | 
| 
       4752 
4789 
     | 
    
         
             
                                    "\nWarning: Chrome failed to launch in"
         
     | 
| 
         @@ -4767,14 +4804,12 @@ def get_local_driver( 
     | 
|
| 
       4767 
4804 
     | 
    
         
             
                        if is_using_uc(undetectable, browser_name):
         
     | 
| 
       4768 
4805 
     | 
    
         
             
                            raise
         
     | 
| 
       4769 
4806 
     | 
    
         
             
                        # Try again if Chrome didn't launch
         
     | 
| 
       4770 
     | 
    
         
            -
                         
     | 
| 
      
 4807 
     | 
    
         
            +
                        with suppress(Exception):
         
     | 
| 
       4771 
4808 
     | 
    
         
             
                            service = ChromeService(service_args=["--disable-build-check"])
         
     | 
| 
       4772 
4809 
     | 
    
         
             
                            driver = webdriver.Chrome(
         
     | 
| 
       4773 
4810 
     | 
    
         
             
                                service=service, options=chrome_options
         
     | 
| 
       4774 
4811 
     | 
    
         
             
                            )
         
     | 
| 
       4775 
4812 
     | 
    
         
             
                            return extend_driver(driver)
         
     | 
| 
       4776 
     | 
    
         
            -
                        except Exception:
         
     | 
| 
       4777 
     | 
    
         
            -
                            pass
         
     | 
| 
       4778 
4813 
     | 
    
         
             
                        if user_data_dir:
         
     | 
| 
       4779 
4814 
     | 
    
         
             
                            print("\nUnable to set user_data_dir while starting Chrome!\n")
         
     | 
| 
       4780 
4815 
     | 
    
         
             
                            raise
         
     | 
    
        seleniumbase/core/mysql.py
    CHANGED
    
    | 
         @@ -35,10 +35,7 @@ class DatabaseManager: 
     | 
|
| 
       35 
35 
     | 
    
         
             
                            import cryptography  # noqa: F401
         
     | 
| 
       36 
36 
     | 
    
         
             
                            import pymysql
         
     | 
| 
       37 
37 
     | 
    
         
             
                        except Exception:
         
     | 
| 
       38 
     | 
    
         
            -
                             
     | 
| 
       39 
     | 
    
         
            -
                                shared_utils.pip_install("PyMySQL[rsa]", version="1.0.2")
         
     | 
| 
       40 
     | 
    
         
            -
                            else:
         
     | 
| 
       41 
     | 
    
         
            -
                                shared_utils.pip_install("PyMySQL[rsa]", version="1.1.0")
         
     | 
| 
      
 38 
     | 
    
         
            +
                            shared_utils.pip_install("PyMySQL[rsa]", version="1.1.1")
         
     | 
| 
       42 
39 
     | 
    
         
             
                            import pymysql
         
     | 
| 
       43 
40 
     | 
    
         
             
                    db_server = settings.DB_HOST
         
     | 
| 
       44 
41 
     | 
    
         
             
                    db_port = settings.DB_PORT
         
     | 
| 
         @@ -422,9 +422,14 @@ def generate_sbase_code(srt_actions): 
     | 
|
| 
       422 
422 
     | 
    
         
             
                    ):
         
     | 
| 
       423 
423 
     | 
    
         
             
                        import unicodedata
         
     | 
| 
       424 
424 
     | 
    
         | 
| 
       425 
     | 
    
         
            -
                         
     | 
| 
       426 
     | 
    
         
            -
                         
     | 
| 
       427 
     | 
    
         
            -
             
     | 
| 
      
 425 
     | 
    
         
            +
                        text_list = False
         
     | 
| 
      
 426 
     | 
    
         
            +
                        try:
         
     | 
| 
      
 427 
     | 
    
         
            +
                            action[1][0] = unicodedata.normalize("NFKC", action[1][0])
         
     | 
| 
      
 428 
     | 
    
         
            +
                            action[1][0] = action[1][0].replace("\n", "\\n")
         
     | 
| 
      
 429 
     | 
    
         
            +
                            action[1][0] = action[1][0].replace("\u00B6", "")
         
     | 
| 
      
 430 
     | 
    
         
            +
                        except Exception:
         
     | 
| 
      
 431 
     | 
    
         
            +
                            text_list = True
         
     | 
| 
      
 432 
     | 
    
         
            +
             
     | 
| 
       428 
433 
     | 
    
         
             
                        method = "assert_text"
         
     | 
| 
       429 
434 
     | 
    
         
             
                        if action[0] == "as_et":
         
     | 
| 
       430 
435 
     | 
    
         
             
                            method = "assert_exact_text"
         
     | 
| 
         @@ -437,7 +442,17 @@ def generate_sbase_code(srt_actions): 
     | 
|
| 
       437 
442 
     | 
    
         
             
                        elif action[0] == "da_et":
         
     | 
| 
       438 
443 
     | 
    
         
             
                            method = "deferred_assert_exact_text"
         
     | 
| 
       439 
444 
     | 
    
         
             
                        if action[1][1] != "html":
         
     | 
| 
       440 
     | 
    
         
            -
                            if  
     | 
| 
      
 445 
     | 
    
         
            +
                            if text_list and '"' not in action[1][1]:
         
     | 
| 
      
 446 
     | 
    
         
            +
                                sb_actions.append(
         
     | 
| 
      
 447 
     | 
    
         
            +
                                    'self.%s(%s, "%s")'
         
     | 
| 
      
 448 
     | 
    
         
            +
                                    % (method, action[1][0], action[1][1])
         
     | 
| 
      
 449 
     | 
    
         
            +
                                )
         
     | 
| 
      
 450 
     | 
    
         
            +
                            elif text_list and "'" not in action[1][1]:
         
     | 
| 
      
 451 
     | 
    
         
            +
                                sb_actions.append(
         
     | 
| 
      
 452 
     | 
    
         
            +
                                    "self.%s(%s, '%s')"
         
     | 
| 
      
 453 
     | 
    
         
            +
                                    % (method, action[1][0], action[1][1])
         
     | 
| 
      
 454 
     | 
    
         
            +
                                )
         
     | 
| 
      
 455 
     | 
    
         
            +
                            elif '"' not in action[1][0] and '"' not in action[1][1]:
         
     | 
| 
       441 
456 
     | 
    
         
             
                                sb_actions.append(
         
     | 
| 
       442 
457 
     | 
    
         
             
                                    'self.%s("%s", "%s")'
         
     | 
| 
       443 
458 
     | 
    
         
             
                                    % (method, action[1][0], action[1][1])
         
     | 
| 
         @@ -458,7 +473,11 @@ def generate_sbase_code(srt_actions): 
     | 
|
| 
       458 
473 
     | 
    
         
             
                                    % (method, action[1][0], action[1][1])
         
     | 
| 
       459 
474 
     | 
    
         
             
                                )
         
     | 
| 
       460 
475 
     | 
    
         
             
                        else:
         
     | 
| 
       461 
     | 
    
         
            -
                            if  
     | 
| 
      
 476 
     | 
    
         
            +
                            if text_list:
         
     | 
| 
      
 477 
     | 
    
         
            +
                                sb_actions.append(
         
     | 
| 
      
 478 
     | 
    
         
            +
                                    'self.%s(%s)' % (method, action[1][0])
         
     | 
| 
      
 479 
     | 
    
         
            +
                                )
         
     | 
| 
      
 480 
     | 
    
         
            +
                            elif '"' not in action[1][0]:
         
     | 
| 
       462 
481 
     | 
    
         
             
                                sb_actions.append(
         
     | 
| 
       463 
482 
     | 
    
         
             
                                    'self.%s("%s")' % (method, action[1][0])
         
     | 
| 
       464 
483 
     | 
    
         
             
                                )
         
     | 
    
        seleniumbase/core/sb_driver.py
    CHANGED
    
    | 
         @@ -1,4 +1,5 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            """Add new methods to extend the driver"""
         
     | 
| 
      
 2 
     | 
    
         
            +
            from contextlib import suppress
         
     | 
| 
       2 
3 
     | 
    
         
             
            from selenium.webdriver.remote.webelement import WebElement
         
     | 
| 
       3 
4 
     | 
    
         
             
            from seleniumbase.fixtures import js_utils
         
     | 
| 
       4 
5 
     | 
    
         
             
            from seleniumbase.fixtures import page_actions
         
     | 
| 
         @@ -36,10 +37,8 @@ class DriverMethods(): 
     | 
|
| 
       36 
37 
     | 
    
         
             
                        selector, by = page_utils.swap_selector_and_by_if_reversed(
         
     | 
| 
       37 
38 
     | 
    
         
             
                            selector, by
         
     | 
| 
       38 
39 
     | 
    
         
             
                        )
         
     | 
| 
       39 
     | 
    
         
            -
                     
     | 
| 
      
 40 
     | 
    
         
            +
                    with suppress(Exception):
         
     | 
| 
       40 
41 
     | 
    
         
             
                        return self.driver.default_find_element(by=by, value=selector)
         
     | 
| 
       41 
     | 
    
         
            -
                    except Exception:
         
     | 
| 
       42 
     | 
    
         
            -
                        pass
         
     | 
| 
       43 
42 
     | 
    
         
             
                    raise Exception('No such Element: {%s} (by="%s")!' % (selector, by))
         
     | 
| 
       44 
43 
     | 
    
         | 
| 
       45 
44 
     | 
    
         
             
                def get_attribute(self, selector, attribute, by="css selector"):
         
     | 
| 
         @@ -113,6 +113,10 @@ def set_settings(settings_file): 
     | 
|
| 
       113 
113 
     | 
    
         
             
                        settings.RAISE_INVALID_PROXY_STRING_EXCEPTION = override_settings[
         
     | 
| 
       114 
114 
     | 
    
         
             
                            key
         
     | 
| 
       115 
115 
     | 
    
         
             
                        ]
         
     | 
| 
      
 116 
     | 
    
         
            +
                    elif key == "WINDOW_START_X":
         
     | 
| 
      
 117 
     | 
    
         
            +
                        settings.WINDOW_START_X = override_settings[key]
         
     | 
| 
      
 118 
     | 
    
         
            +
                    elif key == "WINDOW_START_Y":
         
     | 
| 
      
 119 
     | 
    
         
            +
                        settings.WINDOW_START_Y = override_settings[key]
         
     | 
| 
       116 
120 
     | 
    
         
             
                    elif key == "CHROME_START_WIDTH":
         
     | 
| 
       117 
121 
     | 
    
         
             
                        settings.CHROME_START_WIDTH = override_settings[key]
         
     | 
| 
       118 
122 
     | 
    
         
             
                    elif key == "CHROME_START_HEIGHT":
         
     |