HTML

    Select a Subtopic

    📚 Day 6: Interacting with Dynamic Elements

    Instagram uses dynamic content that loads as you scroll through the page. To interact with these elements (like posts, comments, or followers), we need to handle:

    • Infinite scrolling
    • JavaScript execution with Selenium
    • Locating elements that load dynamically

    🧑‍🏫 Step 1: Handling Infinite Scrolling

    Instagram pages like feeds and hashtag pages use infinite scrolling. This means new posts load dynamically when you scroll down. Here's how to handle it with Selenium:

    🔧 Code Example: Infinite Scrolling on Instagram

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.chrome.service import Service
    from selenium.webdriver.chrome.options import Options
    import time
    
    # Setup Chrome options
    chrome_options = Options()
    chrome_options.add_argument("--disable-notifications")
    chrome_options.add_argument("--start-maximized")
    
    # Initialize the driver
    service = Service("path/to/chromedriver")
    driver = webdriver.Chrome(service=service, options=chrome_options)
    
    # Open Instagram
    driver.get("https://www.instagram.com/")
    
    # Wait for the page to load
    time.sleep(5)
    
    # Log in to Instagram (replace with your credentials)
    username = driver.find_element(By.NAME, "username")
    password = driver.find_element(By.NAME, "password")
    username.send_keys("your_username")
    password.send_keys("your_password")
    login_button = driver.find_element(By.XPATH, "//button[@type='submit']")
    login_button.click()
    
    # Wait for login to complete
    time.sleep(5)
    
    # Infinite scrolling function
    def infinite_scroll():
        last_height = driver.execute_script("return document.body.scrollHeight")
        
        while True:
            # Scroll down to the bottom
            driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
            time.sleep(2)  # Wait for new content to load
            
            # Calculate new scroll height and compare with last height
            new_height = driver.execute_script("return document.body.scrollHeight")
            if new_height == last_height:
                break  # Exit the loop when no more content is loaded
            last_height = new_height
    
    # Call the infinite scroll function
    infinite_scroll()
    
    # Close the browser
    driver.quit()

    🧩 Understanding the Code

    • driver.execute_script(): Executes JavaScript code in the browser.
    • window.scrollTo(0, document.body.scrollHeight): Scrolls to the bottom of the page.
    • document.body.scrollHeight: Returns the total height of the web page.

    🛠️ Practical Task

    • 1. Logs into Instagram.
    • 2. Navigates to a hashtag page.
    • 3. Scrolls through the feed to load at least 20 posts.

    🧑‍💻 Step 2: Interacting with Dynamically Loaded Elements

    After scrolling, you can interact with the newly loaded elements. For example, liking posts or following users.

    🔧 Code Example: Liking Posts on a Hashtag Page

    # Navigate to a hashtag page
    driver.get("https://www.instagram.com/explore/tags/python/")
    
    # Wait for the page to load
    time.sleep(5)
    
    # Infinite scroll
    infinite_scroll()
    
    # Locate posts and like them
    posts = driver.find_elements(By.XPATH, "//a[contains(@href, '/p/')]")
    
    for post in posts[:5]:  # Like the first 5 posts
        driver.get(post.get_attribute("href"))
        time.sleep(2)
    
        try:
            like_button = driver.find_element(By.XPATH, "//span[@aria-label='Like']")
            like_button.click()
            time.sleep(2)
        except Exception as e:
            print("Already liked or couldn't find the like button.")

    🎯 Your Goal for Day 6:

    • 1. Scroll through Instagram feeds automatically.
    • 2. Interact with dynamically loaded elements (like posts).

    Would you like me to help you further with XPath, CSS Selectors, or optimizing your code? 😊