ScreenshotNeo

BlogEngineering

Selenium News and Updates: A Smattering of Selenium 103

Selenium 4.3.0 added CDP 103 support and removed deprecated Python locator methods. Here is what changed, how to migrate, and why CDP 103 support is historical.

By the ScreenshotNeo team4 October 20267 min read

“Selenium 103” refers here to Selenium 4.3.0 and its support for Chrome DevTools Protocol (CDP) 103. The release arrived on June 23, 2022. It is a historical compatibility milestone, not a promise that current Selenium releases support CDP 103. For Python users, the most visible migration change was removal of the deprecated find_element_by_* and find_elements_by_* methods. PyPI’s Selenium 4.3.0 release record lists the date and package details.

1. What changed in Selenium 4.3.0?

The release notes describe changes by language binding. The Java changelog records supported CDP versions 85, 101, 102, and 103, along with WebDriver and Actions API cleanup, BiDi log event support, native ARM socket support, and Firefox profile preference handling. The Python changes removed deprecated locator methods and Opera support, adopted Python 3.7 syntax and features, added a DevTools version fallback for mismatches, and improved type hints and cooperative multiple inheritance. Read the Java changelog and Python change record for the binding-specific details.

Area Recorded change Practical impact
Java CDP Supported versions included CDP 103, alongside 85, 101, and 102. Relevant to Java automation that uses Selenium’s DevTools integration with a matching Chrome generation.
Java APIs Deprecated capability-based WebDriver methods and deprecated Actions commands were removed. Older code relying on removed methods needs to be updated to the supported APIs in its binding.
Java BiDi BiDi log event and augmenter support were added. These notes mark work on a separate browser automation protocol direction; they do not make CDP and BiDi interchangeable.
Java platform Native ARM socket support was added; Firefox profile preferences could be added when retrieving a profile from a file. Useful for the specific platform and profile workflows covered by the release notes.
Python locators Deprecated find_element_by_* and find_elements_by_* methods were removed. Update locator calls to the find_element and find_elements approach.
Python runtime and typing Python 3.7 syntax and features, a DevTools fallback mechanism, and improved type hints were recorded. Check your interpreter and installed binding when maintaining older environments.
Python Opera support Deprecated Opera support was removed. Do not assume the old binding workflow remains available in this release.

These notes are not a complete comparison of every Selenium binding. Version numbers and changes should be checked in the changelog for the language you use.

2. Why was find_element_by_* removed?

Those locator-specific methods had been deprecated; Selenium 4.3.0 removed them from the Python binding. Older code that still calls one can fail with an AttributeError because the driver no longer has that method. Use the shared locator methods with a locator strategy from By.

Migration examples

Old call Locator-strategy form
driver.find_element_by_id("login") driver.find_element(By.ID, "login")
driver.find_element_by_name("email") driver.find_element(By.NAME, "email")
driver.find_element_by_css_selector("button.submit") driver.find_element(By.CSS_SELECTOR, "button.submit")
driver.find_elements_by_xpath("//a") driver.find_elements(By.XPATH, "//a")

The replacement takes the locator strategy and locator value as separate arguments. For a single match, use find_element; for a collection, use find_elements. Choose a strategy and locator that match the page, and consult the documentation for the Selenium version you have installed.

3. Runnable Python example using Selenium 4.3.0

This example pins the historical package version, opens a page, locates its heading with the supported locator form, prints the title and heading, and closes the browser even if an operation fails. A working browser and compatible driver setup are still required.

python -m venv .venv
# Activate the environment for your shell, then:
python -m pip install "selenium==4.3.0"
from selenium import webdriver
from selenium.webdriver.common.by import By

# Selenium Manager behavior varies by Selenium version and setup.
# Provide a compatible driver through your environment if needed.
driver = webdriver.Chrome()
try:
    driver.get("https://example.com")
    heading = driver.find_element(By.TAG_NAME, "h1")
    print("Title:", driver.title)
    print("Heading:", heading.text)
finally:
    driver.quit()

For a maintained project, do not pin an old release just to obtain CDP 103. Select a Selenium and browser combination that matches your current requirements, then check that binding’s release notes and compatibility information.

4. Does Selenium support CDP 103?

Selenium 4.3.0’s Java changelog lists CDP 103 support. But support changed as Selenium and Chrome evolved. Selenium 4.5.0, announced September 28, 2022, added CDP 105 and 106 while removing 102 and 103. See the Selenium 4.5.0 announcement. Therefore, “Selenium 4.3 supports CDP 103” is a statement about that historical release, not current compatibility. Check the changelog for the exact Selenium binding and version you plan to run.

CDP is Chrome DevTools Protocol. Selenium’s release notes identify which CDP versions received compatibility work in a given release. BiDi is a separate protocol direction and should not be described as another name for CDP. Do not infer support for a browser or binding from another binding’s changelog.

5. Do you need Selenium Server?

For ordinary local WebDriver scripts, the Selenium Server JAR is not required. PyPI’s 4.3.0 page says the server is needed for Remote WebDriver or the legacy Selenium API. In a remote setup, the server runs separately and requires a Java Runtime Environment; the Python client then connects to it. See the package instructions and Selenium’s downloads page for server downloads.

6. Troubleshooting Selenium 4.3.0

Symptom Likely cause What to do
AttributeError for find_element_by_* The deprecated locator method was removed in the Python 4.3.0 release. Import By and call driver.find_element(By.ID, "...") or driver.find_elements(By.CSS_SELECTOR, "..."), choosing the appropriate strategy.
DevTools or CDP version mismatch The Chrome/browser generation and the installed Selenium binding’s CDP support do not match. Check the changelog for your exact binding and version. The 4.3.0 CDP list is historical; do not assume it describes a newer release.
Driver cannot start a browser session The browser, driver, runtime, or local configuration is incompatible or unavailable. Check that the browser is installed and that your driver setup matches the browser and Selenium version. This is an environment issue, not proof of a CDP feature failure.
Remote connection fails The Selenium Server may not be running or the client may be pointed at the wrong remote endpoint. Start the server for a Remote WebDriver workflow, verify the endpoint and network access, and confirm that Java is available to run the server.
Old Opera workflow no longer works Deprecated Opera support was removed from the Python binding. Review your browser and binding requirements and choose a supported workflow for the versions you intend to maintain.

7. Performance, reliability, and cost considerations

The release notes establish compatibility and API changes; they do not provide performance benchmarks, reliability guarantees, or operating costs. Selenium automation runs through a browser and driver, so plan for the resources and maintenance of that setup. Browser and driver compatibility, test isolation, page readiness, and cleanup affect whether a run is dependable. Use explicit waits for the page condition your task needs rather than assuming navigation means every dynamic element is ready.

The Selenium Python package is distributed separately from Selenium Server. Local scripts do not need the server JAR; remote execution adds the server and its runtime to the deployment. Avoid selecting a 2022 release solely to preserve a historical CDP target when a current browser is involved. Confirm compatibility against current release information before upgrading or deploying.

8. Or skip the browser setup

If the job is to capture a page image rather than interact with it as a browser test, ScreenshotNeo offers a website screenshot API and MCP server. Its API returns an image or PDF from one GET request; its documentation lists the available parameters and response behavior: ScreenshotNeo API docs.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
    timeout=90,
)
open("shot.webp", "wb").write(r.content)
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);

ScreenshotNeo accepts cookie or consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each of those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing, and response headers indicate the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account for 1,000 screenshots a month, with no card.

9. FAQ

Was Selenium 4.3.0 released in 2023?

No. The PyPI record gives June 23, 2022 as the release date.

Does the Java changelog describe every Selenium language binding?

No. It records Java changes. Check the relevant binding’s changelog for language-specific details.

Does Selenium 4.3.0 require Java for a local Python script?

The Selenium Server JAR is not required for an ordinary local Python WebDriver script. The package record specifies Java for running the server in remote or legacy server use cases.

Can I use a newer Chrome and assume CDP 103 still applies?

No. CDP support changes across Selenium releases. Check the compatibility details for the Selenium version and browser you intend to use.

Sources