HTML

    Select a Subtopic

    🚀 **Day 19: Advanced Instagram Bot Features (Selenium + Tkinter)**

    Today, we'll build more powerful features for your Instagram bot:

    • Automating Direct Messages (DMs).
    • Scraping Instagram profile data (followers, following, posts).
    • Improving GUI with status updates and error handling.

    Let’s make your bot smarter and more interactive! 🎯


    ✅ **What You'll Learn Today:**

    • Sending Automated DMs using Selenium.
    • Scraping profile information from Instagram.
    • Updating Tkinter GUI with live status updates.
    • Handling errors and login issues.

    📨 **1. Automating Direct Messages (DMs)**

    We’ll create a function to send DMs to a specific user.

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    
    # Function to log in and send a DM
    def send_dm(username, password, recipient, message):
        driver = webdriver.Chrome(executable_path="path/to/chromedriver")
        driver.get("https://www.instagram.com/accounts/login/")
        time.sleep(5)
    
        # Login process
        driver.find_element(By.NAME, "username").send_keys(username)
        driver.find_element(By.NAME, "password").send_keys(password)
        driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[3]/button').click()
        time.sleep(5)
    
        # Navigate to the recipient's profile
        driver.get(f"https://www.instagram.com/{recipient}/")
        time.sleep(5)
    
        # Click the message button
        driver.find_element(By.XPATH, "//button[contains(text(), 'Message')]").click()
        time.sleep(3)
    
        # Enter the message and send
        message_box = driver.find_element(By.XPATH, "//textarea")
        message_box.send_keys(message)
        driver.find_element(By.XPATH, "//button[contains(text(), 'Send')]").click()
        print(f"DM sent to {recipient}!")
    
        driver.quit()

    🔍 **2. Scraping Instagram Profile Data**

    We’ll create a function to scrape the number of followers, following, and posts from a profile.

    # Function to scrape profile data
    def scrape_profile(username):
        driver = webdriver.Chrome(executable_path="path/to/chromedriver")
        driver.get(f"https://www.instagram.com/{username}/")
        time.sleep(5)
    
        # Get followers, following, and posts
        followers = driver.find_element(By.XPATH, "//li[1]/a/span").text
        following = driver.find_element(By.XPATH, "//li[2]/a/span").text
        posts = driver.find_element(By.XPATH, "//li[1]/span/span").text
    
        print(f"Profile: {username}")
        print(f"Followers: {followers}")
        print(f"Following: {following}")
        print(f"Posts: {posts}")
    
        driver.quit()

    🖥 **3. Updating Tkinter GUI with Status Updates**

    We’ll modify the Tkinter GUI to display status updates during the bot’s operation.

    import tkinter as tk
    from selenium import webdriver
    from selenium.webdriver.common.by import By
    import time
    import threading
    
    # Function to update the status label
    def update_status(status_label, message):
        status_label.config(text=message)
        status_label.update_idletasks()
    
    # Function to start the bot
    def start_bot(username, password, recipient, message, status_label):
        try:
            driver = webdriver.Chrome(executable_path="path/to/chromedriver")
            update_status(status_label, "Logging in...")
    
            driver.get("https://www.instagram.com/accounts/login/")
            time.sleep(5)
    
            # Login process
            driver.find_element(By.NAME, "username").send_keys(username)
            driver.find_element(By.NAME, "password").send_keys(password)
            driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[3]/button').click()
            time.sleep(5)
    
            # Navigate to the recipient's profile
            driver.get(f"https://www.instagram.com/{recipient}/")
            update_status(status_label, "Sending DM...")
            time.sleep(5)
    
            # Click the message button
            driver.find_element(By.XPATH, "//button[contains(text(), 'Message')]").click()
            time.sleep(3)
    
            # Enter the message and send
            message_box = driver.find_element(By.XPATH, "//textarea")
            message_box.send_keys(message)
            driver.find_element(By.XPATH, "//button[contains(text(), 'Send')]").click()
    
            update_status(status_label, f"DM sent to {recipient}!")
            driver.quit()
        except Exception as e:
            update_status(status_label, f"Error: {str(e)}")
    
    # GUI setup
    root = tk.Tk()
    root.title("Instagram DM Bot")
    root.geometry("400x300")
    
    username_label = tk.Label(root, text="Username:")
    username_label.grid(row=0, column=0, padx=10, pady=10)
    username_entry = tk.Entry(root)
    username_entry.grid(row=0, column=1, padx=10, pady=10)
    
    password_label = tk.Label(root, text="Password:")
    password_label.grid(row=1, column=0, padx=10, pady=10)
    password_entry = tk.Entry(root, show="*")
    password_entry.grid(row=1, column=1, padx=10, pady=10)
    
    recipient_label = tk.Label(root, text="Recipient:")
    recipient_label.grid(row=2, column=0, padx=10, pady=10)
    recipient_entry = tk.Entry(root)
    recipient_entry.grid(row=2, column=1, padx=10, pady=10)
    
    message_label = tk.Label(root, text="Message:")
    message_label.grid(row=3, column=0, padx=10, pady=10)
    message_entry = tk.Entry(root)
    message_entry.grid(row=3, column=1, padx=10, pady=10)
    
    status_label = tk.Label(root, text="Status: Idle")
    status_label.grid(row=5, column=0, columnspan=2, pady=20)
    
    start_button = tk.Button(root, text="Start Bot", command=lambda: threading.Thread(target=start_bot, args=(username_entry.get(), password_entry.get(), recipient_entry.get(), message_entry.get(), status_label)).start())
    start_button.grid(row=4, column=0, columnspan=2, pady=10)
    
    root.mainloop()

    🚀 **4. Handling Errors and Login Issues**

    Let’s improve our bot to handle errors gracefully.

    try:
        # Your Selenium code here
    except Exception as e:
        print(f"Error: {str(e)}")

    🎯 **Day 19 Task:**

    • Automate sending DMs.
    • Scrape profile data (followers, following, posts).
    • Update the GUI with live status.
    • Handle errors in the bot.

    Would you like to learn Day 20 next, where we’ll cover Instagram Story Viewing Automation and Cloud Deployment? 😊