{"id":2256,"date":"2016-03-21T21:25:05","date_gmt":"2016-03-21T15:55:05","guid":{"rendered":"https:\/\/techbeamers.com\/?p=2256"},"modified":"2025-11-30T16:28:51","modified_gmt":"2025-11-30T21:28:51","slug":"selenium-webdriver-python-tutorial","status":"publish","type":"post","link":"https:\/\/techbeamers.com\/selenium-webdriver-python-tutorial\/","title":{"rendered":"Selenium 4 Python Tutorial for Beginners"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Selenium WebDriver is one of the most widely used tools for UI automation testing. Combined with Python\u2019s clean syntax, it becomes a powerful and fast automation stack for web testing, scraping, RPA-style automation, and CI\/CD workflows.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this updated tutorial, you\u2019ll learn:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>How to install Python 3.12<\/li>\n\n\n\n<li>How to install Selenium 4+<\/li>\n\n\n\n<li>Using WebDriver Manager (no manual driver downloads)<\/li>\n\n\n\n<li>Writing your first Selenium Python script<\/li>\n\n\n\n<li>Using modern locators<\/li>\n\n\n\n<li>Running tests on Chrome, Edge, Firefox, and headless browsers<\/li>\n\n\n\n<li>Recommended IDEs<\/li>\n\n\n\n<li>A full working example + updated code<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-introduction-to-selenium-python-automation\">Introduction to Selenium Python Automation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Web UI automation means interacting with a browser automatically\u2014opening webpages, filling forms, clicking buttons, scraping data, validating UI behaviour, and more. Selenium WebDriver allows automation of:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Chrome<\/li>\n\n\n\n<li>Edge<\/li>\n\n\n\n<li>Firefox<\/li>\n\n\n\n<li>Safari<\/li>\n\n\n\n<li>Headless Chrome \/ Firefox<\/li>\n\n\n\n<li>Remote drivers (Selenium Grid, cloud services)<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Python makes Selenium automation easier due to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Simple syntax<\/li>\n\n\n\n<li>Rich ecosystem (pytest, virtualenv, webdriver-manager)<\/li>\n\n\n\n<li>Fast learning curve<\/li>\n\n\n\n<li>Excellent community support<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-set-up-selenium-webdriver-with-python\">Installing Python (Updated)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Most Linux and macOS systems already include Python. Windows users should download Python from the official site:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49 <strong>Download Python 3.12+ (Recommended)<\/strong> at: <a href=\"https:\/\/www.python.org\/downloads\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.python.org\/downloads\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">During installation on Windows:<br>\u2714 Check <strong>&#8220;Add Python to PATH&#8221;<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After installation:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python --version<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You should see:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Python 3.12.x<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-install-selenium-for-python\">Install Selenium WebDriver for Python (Selenium 4)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714 Install the latest and stable Selenium 4<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install selenium<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714 Install WebDriver Manager (important)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This automatically downloads the correct browser driver.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install webdriver-manager<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This means you NO LONGER download chromedriver.exe, geckodriver, or msedgedriver manually.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-choose-your-python-editor-ide\">Choose Your Python Editor (IDE)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Recommended IDEs for Selenium + Python:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PyCharm<\/strong> (Best for most users)<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Free Community Edition available<\/li>\n\n\n\n<li>Intelligent code completion<\/li>\n\n\n\n<li>Debugging + virtualenv support<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>VS Code<\/strong> (Fast and lightweight)<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python extension<\/li>\n\n\n\n<li>Debugging<\/li>\n\n\n\n<li>Integrated terminal<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>PyDev (Eclipse)<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Older but still works for enterprise users.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-your-first-selenium-python-script\">Your First Selenium Python Script (Selenium 4 + Python 3.12)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This script automates:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Opening Google<\/li>\n\n\n\n<li>Typing a search query<\/li>\n\n\n\n<li>Extracting the top 10 results<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Full Updated Code (Chrome + WebDriver Manager)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>from selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.chrome.service import Service\nfrom webdriver_manager.chrome import ChromeDriverManager  # Fixed: Added import\nfrom selenium.webdriver.common.keys import Keys\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\n\n# Initialize Chrome with WebDriver Manager\ndriver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))\ndriver.maximize_window()\ndriver.get(\"https:\/\/www.google.com\")\n\nwait = WebDriverWait(driver, 10)  # Modern wait setup\n\n# Accept cookies if popup appears (more robust XPath for 2025 Google)\ntry:\n    accept_btn = wait.until(EC.element_to_be_clickable((By.XPATH, \"\/\/button&#91;contains(text(), 'Accept') or contains(text(), 'Agree')]\")))\n    accept_btn.click()\nexcept:\n    pass  # No popup? Proceed\n\n# Search box (stable NAME locator)\nsearch_field = wait.until(EC.visibility_of_element_located((By.NAME, \"q\")))\nsearch_field.send_keys(\"Selenium WebDriver Python Tutorial 2025\")\nsearch_field.send_keys(Keys.RETURN)\n\n# Wait for results (no sleep!)\nresults = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, \"h3\")))\n\nprint(f\"\\nTop {min(10, len(results))} Results:\\n\")\nif results:\n    for i, r in enumerate(results&#91;:10], 1):\n        print(f\"{i}: {r.text}\")\nelse:\n    print(\"No results found\u2014try a different query!\")\n\ndriver.quit()<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-understand-the-code\"><a id=\"heading3.2\"><\/a>Understand the Script<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Our code runs multiple steps. It starts with the following:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Step 1 \u2192 Import libraries<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from selenium.webdriver.common.by import By<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Selenium 4 removed methods like <code>find_element_by_id<\/code>. You must use <code>By<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Step 2 \u2192 Start Chrome using WebDriver Manager<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">No need to download chromedriver manually.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Step 3 \u2192 <a href=\"https:\/\/techbeamers.com\/navigation\/\" data-type=\"post\" data-id=\"6714\">Navigate<\/a> to a website<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>driver.get(\"https:\/\/www.google.com\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Step 4 \u2192 Locate elements<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Chrome\u2019s selector for search box is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>search_field = wait.until(EC.visibility_of_element_located((By.NAME, \"q\")))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Step 5 \u2192 Extract results using CSS Selectors<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>results = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, \"h3\")))<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-automation-script-for-ie-and-chrome\">Cross-Browser Testing With Selenium WebDriver<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Selenium Webdriver supports cross-browser testing using Python. It means you can automate other browsers like Edge, Google Chrome, Safari, and headless browsers like Headless Chrome and Headless Firefox.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714 Firefox (GeckoDriver)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from webdriver_manager.firefox import GeckoDriverManager\n\ndriver = webdriver.Firefox(service=Service(GeckoDriverManager().install()))<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714 Microsoft Edge<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from webdriver_manager.microsoft import EdgeChromiumDriverManager\n\ndriver = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()))<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Running Selenium in Headless Mode (Important for CI\/CD)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>from selenium.webdriver.chrome.options import Options\nfrom selenium.webdriver.chrome.service import Service\nfrom webdriver_manager.chrome import ChromeDriverManager\n\noptions = Options()\noptions.add_argument(\"--headless=new\")\noptions.add_argument(\"--window-size=1920,1080\")\n\ndriver = webdriver.Chrome(\n    service=Service(ChromeDriverManager().install()),\n    options=options\n)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Using Explicit Waits (Modern Best Practice)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Never use <code>time.sleep()<\/code> in real projects.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\n\nwait = WebDriverWait(driver, 10)\nsearch_box = wait.until(EC.visibility_of_element_located((By.NAME, \"q\")))<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">A Better Real-World Example (With Explicit Waits)<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>from selenium import webdriver\nfrom selenium.webdriver.common.by import By\nfrom selenium.webdriver.chrome.service import Service\nfrom webdriver_manager.chrome import ChromeDriverManager\nfrom selenium.webdriver.support.ui import WebDriverWait\nfrom selenium.webdriver.support import expected_conditions as EC\nfrom selenium.webdriver.common.keys import Keys\n\ndriver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))\ndriver.maximize_window()\n\ndriver.get(\"https:\/\/www.google.com\")\n\nwait = WebDriverWait(driver, 10)\n\nsearch = wait.until(EC.visibility_of_element_located((By.NAME, \"q\")))\nsearch.send_keys(\"Python Selenium Automation 2025\")\nsearch.send_keys(Keys.RETURN)\n\nresults = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, \"h3\")))\n\nfor r in results&#91;:10]:\n    print(r.text)\n\ndriver.quit()<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Recommended Next Steps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To build a full Selenium Python automation framework, learn:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u2714 Pytest + Selenium<br>\u2714 Page Object Model (POM)<br>\u2714 Screenshot capture<br>\u2714 Logging<br>\u2714 Allure Reports<br>\u2714 Parallel execution<br>\u2714 Docker + Selenium Grid<br>\u2714 CI\/CD integration (GitHub Actions, Jenkins, GitLab CI)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Python Selenium FAQ<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Do I still need chromedriver in 2025?<\/strong> No. Selenium Manager downloads and manages it automatically.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Is webdriver-manager still needed?<\/strong> Only if you\u2019re on Selenium &lt;4.21 or need specific driver versions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Which is faster \u2013 Selenium or Playwright?<\/strong> <a href=\"https:\/\/techbeamers.com\/playwright-python-tutorial\/\" data-type=\"post\" data-id=\"18295\">Playwright<\/a> is faster for new projects. Selenium wins for legacy browser support and huge ecosystem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Lastly, our site needs your support to remain free. Share this post on social media (<a href=\"https:\/\/www.linkedin.com\/company\/techbeamers\/\" target=\"_blank\" rel=\"noreferrer noopener\">LinkedIn<\/a>\/<a href=\"https:\/\/x.com\/TechBeamers\" data-type=\"link\" data-id=\"https:\/\/x.com\/TechBeamers\" target=\"_blank\" rel=\"noreferrer noopener\">Twitter<\/a>) if you gained some knowledge from this tutorial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Happy Testing!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Selenium WebDriver is one of the most widely used tools for UI automation testing. Combined with Python\u2019s clean syntax, it becomes a powerful and fast automation stack for web testing, scraping, RPA-style automation, and CI\/CD workflows. In this updated tutorial, you\u2019ll learn: Introduction to Selenium Python Automation Web UI automation means interacting with a browser [&hellip;]<\/p>\n","protected":false},"author":321,"featured_media":6716,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_wpcom_ai_launchpad_first_post":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[92],"tags":[7471,6949],"class_list":["post-2256","post","type-post","status-publish","format-standard","has-post-thumbnail","category-python-programming-tutorials","tag-python-selenium-tutorial","tag-run-selenium-tests-in-linux"],"jetpack_featured_media_url":"https:\/\/techbeamers.com\/wp-content\/uploads\/2016\/03\/Selenium-Python-Learn-Step-by-Step.png","_links":{"self":[{"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/posts\/2256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/users\/321"}],"replies":[{"embeddable":true,"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/comments?post=2256"}],"version-history":[{"count":23,"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/posts\/2256\/revisions"}],"predecessor-version":[{"id":23911,"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/posts\/2256\/revisions\/23911"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/media\/6716"}],"wp:attachment":[{"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/media?parent=2256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/categories?post=2256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techbeamers.com\/wp-json\/wp\/v2\/tags?post=2256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}