diff --git a/MANIFEST.in b/MANIFEST.in
index c73dec4c..ee571c0a 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -6,7 +6,6 @@ recursive-include selenium/webdriver/common/html5 *.py
 recursive-include selenium/common *.py
 recursive-include selenium/webdriver/chromium *.py
 recursive-include selenium/webdriver/chrome *.py
-recursive-include selenium/webdriver/opera *.py
 recursive-include selenium/webdriver/phantomjs *.py
 recursive-include selenium/webdriver/firefox *.py *.xpi *.json
 recursive-include selenium/webdriver/ie *.py
diff --git a/docs/source/api.rst b/docs/source/api.rst
index 03f91b7a..5631e3a7 100644
--- a/docs/source/api.rst
+++ b/docs/source/api.rst
@@ -121,16 +121,6 @@ Webdriver.ie
    selenium.webdriver.ie.options
    selenium.webdriver.ie.webdriver
 
-Webdriver.opera
----------------
-
-.. currentmodule:: selenium.webdriver.opera
-.. autosummary::
-   :toctree: webdriver_opera
-
-   selenium.webdriver.opera.webdriver
-   selenium.webdriver.opera.options
-
 Webdriver.remote
 ----------------
 
diff --git a/docs/source/webdriver_opera/selenium.webdriver.opera.webdriver.rst b/docs/source/webdriver_opera/selenium.webdriver.opera.webdriver.rst
deleted file mode 100644
index ca7f7557..00000000
--- a/docs/source/webdriver_opera/selenium.webdriver.opera.webdriver.rst
+++ /dev/null
@@ -1,30 +0,0 @@
-selenium.webdriver.opera.webdriver
-==================================
-
-.. automodule:: selenium.webdriver.opera.webdriver
-
-   
-   
-   
-
-   
-   
-   
-
-   
-   
-   .. rubric:: Classes
-
-   .. autosummary::
-   
-      OperaDriver
-      WebDriver
-   
-   
-
-   
-   
-   
-
-
-
diff --git a/selenium/webdriver/__init__.py b/selenium/webdriver/__init__.py
index 64c2ca87..ab37af0e 100644
--- a/selenium/webdriver/__init__.py
+++ b/selenium/webdriver/__init__.py
@@ -25,7 +25,6 @@ from .ie.options import Options as IeOptions  # noqa
 from .edge.webdriver import WebDriver as Edge  # noqa
 from .edge.webdriver import WebDriver as ChromiumEdge  # noqa
 from .edge.options import Options as EdgeOptions  # noqa
-from .opera.webdriver import WebDriver as Opera  # noqa
 from .safari.webdriver import WebDriver as Safari  # noqa
 from .webkitgtk.webdriver import WebDriver as WebKitGTK  # noqa
 from .webkitgtk.options import Options as WebKitGTKOptions  # noqa
diff --git a/selenium/webdriver/common/desired_capabilities.py b/selenium/webdriver/common/desired_capabilities.py
index cbeeb8f8..706012ec 100644
--- a/selenium/webdriver/common/desired_capabilities.py
+++ b/selenium/webdriver/common/desired_capabilities.py
@@ -66,10 +66,6 @@ class DesiredCapabilities:
         "browserName": "chrome",
     }
 
-    OPERA = {
-        "browserName": "opera",
-    }
-
     SAFARI = {
         "browserName": "safari",
         "platformName": "mac",
diff --git a/selenium/webdriver/opera/__init__.py b/selenium/webdriver/opera/__init__.py
deleted file mode 100644
index a5b1e6f8..00000000
--- a/selenium/webdriver/opera/__init__.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# Licensed to the Software Freedom Conservancy (SFC) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The SFC licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
diff --git a/selenium/webdriver/opera/options.py b/selenium/webdriver/opera/options.py
deleted file mode 100644
index b358bf31..00000000
--- a/selenium/webdriver/opera/options.py
+++ /dev/null
@@ -1,113 +0,0 @@
-# Licensed to the Software Freedom Conservancy (SFC) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The SFC licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-import warnings
-
-from selenium.webdriver.chrome.options import Options as ChromeOptions
-from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
-
-
-class Options(ChromeOptions):
-    KEY = "operaOptions"
-
-    def __init__(self):
-        warnings.warn(f"{self.__class__} is deprecated and will be removed in 4.3; "
-                      f"see: https://www.selenium.dev/documentation/webdriver/getting_started/open_browser/#opera",
-                      DeprecationWarning, stacklevel=2)
-        super().__init__()
-        self._android_package_name = ''
-        self._android_device_socket = ''
-        self._android_command_line_file = ''
-
-    @property
-    def android_package_name(self):
-        """
-        :Returns: The name of the Opera package
-        """
-        return self._android_package_name
-
-    @android_package_name.setter
-    def android_package_name(self, value):
-        """
-        Allows you to set the package name
-
-        :Args:
-         - value: devtools socket name
-        """
-        self._android_package_name = value
-
-    @property
-    def android_device_socket(self):
-        """
-        :Returns: The name of the devtools socket
-        """
-        return self._android_device_socket
-
-    @android_device_socket.setter
-    def android_device_socket(self, value):
-        """
-        Allows you to set the devtools socket name
-
-        :Args:
-         - value: devtools socket name
-        """
-        self._android_device_socket = value
-
-    @property
-    def android_command_line_file(self):
-        """
-        :Returns: The path of the command line file
-        """
-        return self._android_command_line_file
-
-    @android_command_line_file.setter
-    def android_command_line_file(self, value):
-        """
-        Allows you to set where the command line file lives
-
-        :Args:
-         - value: command line file path
-        """
-        self._android_command_line_file = value
-
-    def to_capabilities(self):
-        """
-        Creates a capabilities with all the options that have been set and
-        returns a dictionary with everything
-        """
-        capabilities = ChromeOptions.to_capabilities(self)
-        capabilities.update(self._caps)
-        opera_options = capabilities[self.KEY]
-
-        if self.android_package_name:
-            opera_options["androidPackage"] = self.android_package_name
-        if self.android_device_socket:
-            opera_options["androidDeviceSocket"] = self.android_device_socket
-        if self.android_command_line_file:
-            opera_options["androidCommandLineFile"] = \
-                self.android_command_line_file
-        return capabilities
-
-    @property
-    def default_capabilities(self):
-        return DesiredCapabilities.OPERA.copy()
-
-
-class AndroidOptions(Options):
-
-    def __init__(self):
-        super().__init__()
-        self.android_package_name = 'com.opera.browser'
diff --git a/selenium/webdriver/opera/webdriver.py b/selenium/webdriver/opera/webdriver.py
deleted file mode 100644
index bbef7a82..00000000
--- a/selenium/webdriver/opera/webdriver.py
+++ /dev/null
@@ -1,79 +0,0 @@
-# Licensed to the Software Freedom Conservancy (SFC) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The SFC licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-import warnings
-
-from selenium.webdriver.chrome.webdriver import WebDriver as ChromiumDriver
-from .options import Options
-
-
-class OperaDriver(ChromiumDriver):
-    """Controls the new OperaDriver and allows you
-    to drive the Opera browser based on Chromium."""
-
-    def __init__(self, executable_path=None, port=0,
-                 options=None, service_args=None,
-                 desired_capabilities=None, service_log_path=None,
-                 opera_options=None, keep_alive=True):
-        """
-        Creates a new instance of the operadriver.
-
-        Starts the service and then creates new instance of operadriver.
-
-        :Args:
-         - executable_path - path to the executable. If the default is used
-                             it assumes the executable is in the $PATH
-         - port - port you would like the service to run, if left as 0,
-                  a free port will be found.
-         - options: this takes an instance of OperaOptions
-         - service_args - List of args to pass to the driver service
-         - desired_capabilities: Dictionary object with non-browser specific
-         - service_log_path - Where to log information from the driver.
-           capabilities only, such as "proxy" or "loggingPref".
-        """
-        warnings.warn(f"{self.__class__} is deprecated and will be removed in 4.3; "
-                      f"see: https://www.selenium.dev/documentation/webdriver/getting_started/open_browser/#opera",
-                      DeprecationWarning, stacklevel=2)
-        executable_path = (executable_path if executable_path else "operadriver")
-        ChromiumDriver.__init__(self,
-                                executable_path=executable_path,
-                                port=port,
-                                options=options,
-                                service_args=service_args,
-                                desired_capabilities=desired_capabilities,
-                                service_log_path=service_log_path,
-                                keep_alive=keep_alive)
-
-    def create_options(self):
-        return Options()
-
-
-class WebDriver(OperaDriver):
-    class ServiceType:
-        CHROMIUM = 2
-
-    def __init__(self,
-                 desired_capabilities=None,
-                 executable_path=None,
-                 port=0,
-                 service_log_path=None,
-                 service_args=None,
-                 options=None):
-        OperaDriver.__init__(self, executable_path=executable_path,
-                             port=port, options=options,
-                             service_args=service_args,
-                             desired_capabilities=desired_capabilities,
-                             service_log_path=service_log_path)
diff --git a/setup.py b/setup.py
index ed519f60..46368c5c 100755
--- a/setup.py
+++ b/setup.py
@@ -61,7 +61,6 @@ setup_args = {
                  'selenium.webdriver.firefox',
                  'selenium.webdriver.ie',
                  'selenium.webdriver.edge',
-                 'selenium.webdriver.opera',
                  'selenium.webdriver.remote',
                  'selenium.webdriver.support', ],
     'include_package_data': True,
diff --git a/test/unit/selenium/webdriver/opera/opera_options_tests.py b/test/unit/selenium/webdriver/opera/opera_options_tests.py
deleted file mode 100644
index 052782c0..00000000
--- a/test/unit/selenium/webdriver/opera/opera_options_tests.py
+++ /dev/null
@@ -1,97 +0,0 @@
-# Licensed to the Software Freedom Conservancy (SFC) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The SFC licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-import pytest
-
-from selenium.webdriver.opera.options import Options
-
-
-@pytest.fixture
-def options():
-    return Options()
-
-
-def test_set_android_package_name(options):
-    options.android_package_name = 'bar'
-    assert options._android_package_name == 'bar'
-
-
-def test_get_android_package_name(options):
-    options._android_package_name = 'bar'
-    assert options.android_package_name == 'bar'
-
-
-def test_set_android_device_socket(options):
-    options.android_device_socket = 'bar'
-    assert options._android_device_socket == 'bar'
-
-
-def test_get_android_device_socket(options):
-    options._android_device_socket = 'bar'
-    assert options.android_device_socket == 'bar'
-
-
-def test_set_android_command_line_file(options):
-    options.android_command_line_file = 'bar'
-    assert options._android_command_line_file == 'bar'
-
-
-def test_get_android_command_line_file(options):
-    options._android_command_line_file = 'bar'
-    assert options.android_command_line_file == 'bar'
-
-
-def test_creates_capabilities(options):
-    options._arguments = ['foo']
-    options._binary_location = '/bar'
-    options._extensions = ['baz']
-    options._debugger_address = '/foo/bar'
-    options._experimental_options = {'foo': 'bar'}
-    options._android_package_name = 'bar'
-    options._android_command_line_file = 'foo'
-    options._android_device_socket = 'spam'
-    caps = options.to_capabilities()
-    opts = caps.get(Options.KEY)
-    assert opts
-    assert 'foo' in opts['args']
-    assert opts['binary'] == '/bar'
-    assert 'baz' in opts['extensions']
-    assert opts['debuggerAddress'] == '/foo/bar'
-    assert opts['foo'] == 'bar'
-    assert opts['androidPackage'] == 'bar'
-    assert opts['androidCommandLineFile'] == 'foo'
-    assert opts['androidDeviceSocket'] == 'spam'
-
-
-def test_starts_with_default_capabilities(options):
-    from selenium.webdriver import DesiredCapabilities
-    caps = DesiredCapabilities.OPERA.copy()
-    caps.update({"pageLoadStrategy": "normal"})
-    assert options._caps == caps
-
-
-def test_is_a_baseoptions(options):
-    from selenium.webdriver.common.options import BaseOptions
-    assert isinstance(options, BaseOptions)
-
-
-def test_opera_options_is_deprecated(options):
-    with pytest.warns(DeprecationWarning) as captured:
-        Options()
-    expected = "<class 'selenium.webdriver.opera.options.Options'> is deprecated and will be removed in 4.3; " \
-               "see: https://www.selenium.dev/documentation/webdriver/getting_started/open_browser/#opera"
-    assert captured[0].message.args[0] == expected
diff --git a/test/unit/selenium/webdriver/remote/new_session_tests.py b/test/unit/selenium/webdriver/remote/new_session_tests.py
index 94a129ab..45e4e76c 100644
--- a/test/unit/selenium/webdriver/remote/new_session_tests.py
+++ b/test/unit/selenium/webdriver/remote/new_session_tests.py
@@ -55,7 +55,7 @@ def test_works_as_context_manager(mocker):
     assert quit_.call_count == 1
 
 
-@pytest.mark.parametrize('browser_name', ['firefox', 'chrome', 'ie', 'opera'])
+@pytest.mark.parametrize('browser_name', ['firefox', 'chrome', 'ie'])
 def test_accepts_firefox_options_to_remote_driver(mocker, browser_name):
     options = import_module(f'selenium.webdriver.{browser_name}.options')
     caps_name = browser_name.upper() if browser_name != 'ie' else 'INTERNETEXPLORER'