Python Script

Master Web Automation with Python and Selenium

The ability to automate interactions with the web is a superpower. From QA engineers building robust end-to-end testing pipelines to data scientists scraping information, browser automation is the engine behind the modern digital workforce. This guide provides the most popular script for this task: a Python script using Selenium to automate website login and data extraction.

We'll walk through a complete, real-world example that you can run on your own machine. This is your definitive starting point for mastering web automation.

The Power of Selenium: Your Browser's Robot Chauffeur

Selenium is an open-source framework that allows you to write code that controls a web browser, just as a human would. You can instruct it to find elements, type text, click buttons, and extract any visible data. It is the gold standard for UI testing and a cornerstone of modern Robotic Process Automation (RPA).

How to Use This Script: A Step-by-Step Guide

  1. Prerequisites: You need Python 3, pip, and the Google Chrome browser installed.
  2. Save the Script: Click "Copy Script" below and save the code as `selenium_automation.py`.
  3. Install Dependencies: Open your terminal and run this crucial command to install Selenium and the `webdriver-manager` library, which automatically handles the browser driver for you:
    pip install selenium webdriver-manager
  4. Run the Automation: In your terminal, run the script:
    python selenium_automation.py
  5. Watch the Magic: A new Chrome window will open, log into a demo site, and scrape product data, printing the results in your terminal.

The Benefits: Beyond a Simple Script

Mastering this workflow unlocks a vast array of possibilities:


import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def automate_sauce_demo():
    print("--- Starting Selenium Web Automation Script ---")
    
    print("[SETUP] Initializing Chrome WebDriver...")
    try:
        service = ChromeService(ChromeDriverManager().install())
        driver = webdriver.Chrome(service=service)
    except Exception as e:
        print(f"Error initializing WebDriver: {e}")
        return

    try:
        print("[ACTION] Navigating to login page...")
        driver.get("https://www.saucedemo.com/")
        print("[ACTION] Entering credentials...")
        driver.find_element(By.ID, "user-name").send_keys("standard_user")
        driver.find_element(By.ID, "password").send_keys("secret_sauce")
        print("[ACTION] Clicking login button...")
        driver.find_element(By.ID, "login-button").click()
    except Exception as e:
        print(f"An error occurred during login: {e}")
        driver.quit()
        return

    try:
        print("[ACTION] Waiting for inventory page to load...")
        WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located((By.CLASS_NAME, "inventory_list"))
        )
        print("[SUCCESS] Inventory page loaded.")

        print("\n--- Scraping Product Data ---")
        inventory_items = driver.find_elements(By.CLASS_NAME, "inventory_item")
        scraped_data = []
        for item in inventory_items:
            name = item.find_element(By.CLASS_NAME, "inventory_item_name").text
            price = item.find_element(By.CLASS_NAME, "inventory_item_price").text
            scraped_data.append({"name": name, "price": price})
            print(f"  - Found: {name} | Price: {price}")
        
        print("\n[SUCCESS] Scraping complete.")
        return scraped_data

    except Exception as e:
        print(f"An error occurred during scraping: {e}")
        return None
        
    finally:
        print("\n[CLEANUP] Closing browser window...")
        driver.quit()
        print("--- Script Finished ---")

if __name__ == "__main__":
    scraped_products = automate_sauce_demo()
    if scraped_products:
        print(f"\nSuccessfully scraped {len(scraped_products)} products.")