SeleniumHQ/selenium · error · ValueError

port must be 0-65535

Error message

port must be 0-65535

What it means

Raised as ValueError by the Server.port setter after a successful int() conversion if the resulting port is outside the valid TCP range 0-65535. This is a range validation that runs after the type conversion check, catching numerically valid but semantically invalid port numbers.

Source

Thrown at py/selenium/webdriver/remote/server.py:114

    @path.setter
    def path(self, path):
        if path and not os.path.exists(path):
            raise OSError(f"Can't find server .jar located at {path}")
        self._path = path

    @property
    def port(self):
        return self._port

    @port.setter
    def port(self, port):
        try:
            port = int(port)
        except ValueError:
            raise TypeError(f"{__class__.__name__}.__init__() got an invalid port: '{port}'")
        if not (0 <= port <= 65535):
            raise ValueError("port must be 0-65535")
        self._port = port

    @property
    def version(self):
        return self._version

    @version.setter
    def version(self, version):
        if version:
            if not re.match(r"^\d+\.\d+\.\d+$", str(version)):
                raise TypeError(f"{__class__.__name__}.__init__() got an invalid version: '{version}'")
        self._version = version

    @property
    def log_level(self):
        return self._log_level

    @log_level.setter

View on GitHub (pinned to aa36b38e69)

Solutions

  1. Use a port in the standard range: Server(port=4444) (the default)
  2. Validate the port range before passing: assert 0 <= port <= 65535
  3. Use ephemeral port 0 if you want the OS to assign a free port automatically

Example fix

// before
server = Server(port=99999)

// after
server = Server(port=4444)
# or let OS choose:
server = Server(port=0)
Defensive patterns

Strategy: validation

Validate before calling

port = int(os.environ.get('PORT', 4444))
if not (0 <= port <= 65535):
    raise ValueError(f'Port out of range: {port}')
server = Server(port=port)

Type guard

def is_valid_port(port: int) -> bool:
    return isinstance(port, int) and 0 <= port <= 65535

Try / catch

try:
    server = Server(port=port)
except ValueError:
    server = Server(port=4444)  # fallback to default

Prevention

When it happens

Trigger: Calling Server(port=70000), Server(port=-1), Server(port=99999), or Server(port='70000') triggers the ValueError. The port converts to int fine but fails the 0-65535 bounds check.

Common situations: Configuration typos adding extra digits. Misunderstanding of valid port ranges. Accidentally passing a PID or other large number as a port.

Related errors


AI-assisted analysis of SeleniumHQ/selenium@aa36b38e69 (2026-08-14). Data as JSON: /api/errors/df83f33cb85f88da. Report an issue: GitHub.