From 71f5ef15aa858ebad2bea8d250a2844147601178 Mon Sep 17 00:00:00 2001 From: SunnyCapt Date: Tue, 27 Apr 2021 16:51:14 +0300 Subject: [PATCH 1/5] added the ability to completely disable selenium-wire and use selenium --- seleniumwire/webdriver.py | 69 ++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 16 deletions(-) diff --git a/seleniumwire/webdriver.py b/seleniumwire/webdriver.py index 9c1ddb3..e2ec071 100644 --- a/seleniumwire/webdriver.py +++ b/seleniumwire/webdriver.py @@ -14,6 +14,12 @@ from seleniumwire import backend from seleniumwire.inspect import InspectRequestsMixin +try: + # noinspection PyUnresolvedReferences + from undetected_chromedriver import ChromeOptions +except ImportError: + pass + class DriverCommonMixin: """Operations common to all webdriver types.""" @@ -46,7 +52,7 @@ def quit(self): super().quit() -class Firefox(InspectRequestsMixin, DriverCommonMixin, _Firefox): +class _SeleniumWireFirefox(InspectRequestsMixin, DriverCommonMixin, _Firefox): """Extends the Firefox webdriver to provide additional methods for inspecting requests.""" def __init__(self, *args, seleniumwire_options=None, **kwargs): @@ -75,7 +81,7 @@ def __init__(self, *args, seleniumwire_options=None, **kwargs): super().__init__(*args, **kwargs) -class Chrome(InspectRequestsMixin, DriverCommonMixin, _Chrome): +class _SeleniumWireChrome(InspectRequestsMixin, DriverCommonMixin, _Chrome): """Extends the Chrome webdriver to provide additional methods for inspecting requests.""" def __init__(self, *args, seleniumwire_options=None, **kwargs): @@ -114,18 +120,7 @@ def __init__(self, *args, seleniumwire_options=None, **kwargs): super().__init__(*args, **kwargs) -try: - # If we find undetected_chromedriver in the environment, we - # assume the user intends for us to use it. - import undetected_chromedriver - undetected_chromedriver._Chrome = Chrome - Chrome = undetected_chromedriver.Chrome - ChromeOptions = undetected_chromedriver.ChromeOptions # noqa: F811 -except ImportError: - pass - - -class Safari(InspectRequestsMixin, DriverCommonMixin, _Safari): +class _SeleniumWireSafari(InspectRequestsMixin, DriverCommonMixin, _Safari): """Extends the Safari webdriver to provide additional methods for inspecting requests.""" def __init__(self, seleniumwire_options=None, *args, **kwargs): @@ -151,7 +146,7 @@ def __init__(self, seleniumwire_options=None, *args, **kwargs): super().__init__(*args, **kwargs) -class Edge(InspectRequestsMixin, DriverCommonMixin, _Edge): +class _SeleniumWireEdge(InspectRequestsMixin, DriverCommonMixin, _Edge): """Extends the Edge webdriver to provide additional methods for inspecting requests.""" def __init__(self, seleniumwire_options=None, *args, **kwargs): @@ -177,7 +172,7 @@ def __init__(self, seleniumwire_options=None, *args, **kwargs): super().__init__(*args, **kwargs) -class Remote(InspectRequestsMixin, DriverCommonMixin, _Remote): +class _SeleniumWireRemote(InspectRequestsMixin, DriverCommonMixin, _Remote): """Extends the Remote webdriver to provide additional methods for inspecting requests.""" def __init__(self, *args, seleniumwire_options=None, **kwargs): @@ -207,6 +202,48 @@ def __init__(self, *args, seleniumwire_options=None, **kwargs): super().__init__(*args, **kwargs) +class Firefox: + def __new__(cls, *args, use_seleniumwire=True, **kwargs): + clazz = _SeleniumWireFirefox if use_seleniumwire else _Firefox + return clazz(*args, **kwargs) + + +class Chrome: + def __new__(cls, *args, use_seleniumwire=True, **kwargs): + clazz = _SeleniumWireChrome if use_seleniumwire else _Chrome + + try: + # noinspection PyUnresolvedReferences + import undetected_chromedriver as uc + + if 'chrome2use' not in kwargs: + kwargs['chrome2use'] = clazz + + clazz = uc.Chrome + except ImportError: + pass + + return clazz(*args, **kwargs) + + +class Safari: + def __new__(cls, *args, use_seleniumwire=True, **kwargs): + clazz = _SeleniumWireSafari if use_seleniumwire else _Safari + return clazz(*args, **kwargs) + + +class Edge: + def __new__(cls, *args, use_seleniumwire=True, **kwargs): + clazz = _SeleniumWireEdge if use_seleniumwire else _Edge + return clazz(*args, **kwargs) + + +class Remote: + def __new__(cls, *args, use_seleniumwire=True, **kwargs): + clazz = _SeleniumWireRemote if use_seleniumwire else _Remote + return clazz(*args, **kwargs) + + def urlsafe_address(address): """Make an address safe to use in a URL. From 15416f9d7631ae46b69a4e8b3af461711387e504 Mon Sep 17 00:00:00 2001 From: SunnyCapt Date: Tue, 27 Apr 2021 17:01:55 +0300 Subject: [PATCH 2/5] update docs and authors --- AUTHORS.rst | 2 +- README.rst | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/AUTHORS.rst b/AUTHORS.rst index 094925e..35862e1 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -10,4 +10,4 @@ Development Lead Contributors ------------ -None yet. Why not be the first? +* Sunny Capt diff --git a/README.rst b/README.rst index 6672d50..dd05544 100644 --- a/README.rst +++ b/README.rst @@ -206,6 +206,12 @@ Selenium Wire has limited support for using the remote webdriver client. When yo If the machine running the browser needs to use a different address to talk to the machine running Selenium Wire you need to configure the browser manually. `This issue `_ goes into more detail. +If you need to completely disable the use of selenium-wire: + +.. code:: python + + driver = webdriver.Chrome(use_seleniumwire=False) + Accessing Requests ~~~~~~~~~~~~~~~~~~ From 4780272e85a536fdf855601ea3a75b871c307068 Mon Sep 17 00:00:00 2001 From: SunnyCapt Date: Tue, 27 Apr 2021 20:14:41 +0300 Subject: [PATCH 3/5] do not remove information for static code analysis --- seleniumwire/webdriver.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/seleniumwire/webdriver.py b/seleniumwire/webdriver.py index e2ec071..25c751e 100644 --- a/seleniumwire/webdriver.py +++ b/seleniumwire/webdriver.py @@ -202,13 +202,13 @@ def __init__(self, *args, seleniumwire_options=None, **kwargs): super().__init__(*args, **kwargs) -class Firefox: +class Firefox(InspectRequestsMixin, DriverCommonMixin, _Firefox): def __new__(cls, *args, use_seleniumwire=True, **kwargs): clazz = _SeleniumWireFirefox if use_seleniumwire else _Firefox return clazz(*args, **kwargs) -class Chrome: +class Chrome(InspectRequestsMixin, DriverCommonMixin, _Chrome): def __new__(cls, *args, use_seleniumwire=True, **kwargs): clazz = _SeleniumWireChrome if use_seleniumwire else _Chrome @@ -226,19 +226,19 @@ def __new__(cls, *args, use_seleniumwire=True, **kwargs): return clazz(*args, **kwargs) -class Safari: +class Safari(InspectRequestsMixin, DriverCommonMixin, _Safari): def __new__(cls, *args, use_seleniumwire=True, **kwargs): clazz = _SeleniumWireSafari if use_seleniumwire else _Safari return clazz(*args, **kwargs) -class Edge: +class Edge(InspectRequestsMixin, DriverCommonMixin, _Edge): def __new__(cls, *args, use_seleniumwire=True, **kwargs): clazz = _SeleniumWireEdge if use_seleniumwire else _Edge return clazz(*args, **kwargs) -class Remote: +class Remote(InspectRequestsMixin, DriverCommonMixin, _Remote): def __new__(cls, *args, use_seleniumwire=True, **kwargs): clazz = _SeleniumWireRemote if use_seleniumwire else _Remote return clazz(*args, **kwargs) From 86721e6a5bc81360d288d745c6dc755b84bb79a5 Mon Sep 17 00:00:00 2001 From: Sunny Capt Date: Wed, 28 Apr 2021 22:31:30 +0300 Subject: [PATCH 4/5] Update webdriver.py --- seleniumwire/webdriver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seleniumwire/webdriver.py b/seleniumwire/webdriver.py index 25c751e..ad5c306 100644 --- a/seleniumwire/webdriver.py +++ b/seleniumwire/webdriver.py @@ -16,7 +16,7 @@ try: # noinspection PyUnresolvedReferences - from undetected_chromedriver import ChromeOptions + from undetected_chromedriver import ChromeOptions # noqa except ImportError: pass From 0d17d64d2fecffd80be31fd49eca866feec8c351 Mon Sep 17 00:00:00 2001 From: Sunny Capt Date: Wed, 28 Apr 2021 22:36:54 +0300 Subject: [PATCH 5/5] Update README.rst --- README.rst | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/README.rst b/README.rst index dd05544..5b5bded 100644 --- a/README.rst +++ b/README.rst @@ -206,12 +206,6 @@ Selenium Wire has limited support for using the remote webdriver client. When yo If the machine running the browser needs to use a different address to talk to the machine running Selenium Wire you need to configure the browser manually. `This issue `_ goes into more detail. -If you need to completely disable the use of selenium-wire: - -.. code:: python - - driver = webdriver.Chrome(use_seleniumwire=False) - Accessing Requests ~~~~~~~~~~~~~~~~~~ @@ -841,6 +835,13 @@ A summary of all options that can be passed to Selenium Wire via the ``seleniumw } driver = webdriver.Chrome(seleniumwire_options=options) +``request_storage_base_dir`` + Completely disable the use of selenium-wire. The default is ``True``. + +.. code:: python + + driver = webdriver.Chrome(use_seleniumwire=False) + ``verify_ssl`` Whether SSL certificates should be verified. The default is ``False`` which prevents errors with self-signed certificates.