How to Automate Instagram DMs Using Python (Without Third-Party Apps)

In the age of social media, automating repetitive tasks can save time and boost productivity. If you’re looking to automate Instagram Direct Messages (DMs) using Python—without relying on third-party apps—this guide is for you. We’ll walk through a step-by-step method that respects Instagram’s guidelines while leveraging Python’s power.

Note: This tutorial is for educational purposes. Always comply with Instagram’s Terms of Service to avoid account restrictions.


Why Automate Instagram DMs?

Automating DMs can help:

  • Send personalized welcome messages to new followers.
  • Share updates with close friends or clients.
  • Streamline outreach for small businesses.

But tread carefully: Instagram’s anti-spam algorithms are strict. Overuse of automation can lead to temporary bans or account suspension.


What You’ll Need

  1. Python Installed: Download the latest version from python.org.
  2. Selenium Library: A tool for browser automation.
pip install selenium  
  1. WebDriver: Use ChromeDriver (matches your Chrome browser version). Download here.

Step 1: Setting Up the Environment

  1. Create a Project Folder: Organize your files.
  2. Initialize a Python Script: Name it insta_dm.py.
  3. Import Required Libraries:
from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
import time  

Step 2: Logging into Instagram

We’ll use Selenium to mimic a real browser session.

python

def login(username, password):  
    # Launch Chrome  
    driver = webdriver.Chrome(executable_path='path/to/chromedriver')  
    driver.get("https://www.instagram.com/")  

    # Wait for page to load  
    time.sleep(3)  

    # Fill login details  
    username_field = driver.find_element_by_name("username")  
    username_field.send_keys(username)  

    password_field = driver.find_element_by_name("password")  
    password_field.send_keys(password)  

    # Submit form  
    password_field.send_keys(Keys.RETURN)  

    # Handle "Save Info" and "Turn On Notifications" prompts  
    time.sleep(5)  
    driver.find_element_by_xpath("//button[contains(text(), 'Not Now')]").click()  
    time.sleep(2)  
    driver.find_element_by_xpath("//button[contains(text(), 'Not Now')]").click()  

    return driver  

Key Notes:

  • Replace 'path/to/chromedriver' with your actual ChromeDriver path.
  • Use time.sleep() to avoid bot-like behavior.

Step 3: Sending a Direct Message

Once logged in, navigate to the DM interface and send a message.

python

def send_dm(driver, recipient, message):  
    # Open DM section  
    driver.get("https://www.instagram.com/direct/new/")  
    time.sleep(3)  

    # Search for recipient  
    search_box = driver.find_element_by_xpath("//input[@placeholder='Search...']")  
    search_box.send_keys(recipient)  
    time.sleep(2)  

    # Select the first matching user  
    driver.find_element_by_xpath("//div[@role='button']").click()  
    time.sleep(1)  

    # Click "Next"  
    driver.find_element_by_xpath("//div[contains(text(), 'Next')]").click()  
    time.sleep(2)  

    # Type and send the message  
    message_box = driver.find_element_by_xpath("//textarea[@placeholder='Message...']")  
    message_box.send_keys(message)  
    message_box.send_keys(Keys.RETURN)  
    time.sleep(2)  

    print(f"Message sent to {recipient}!")  

Customization Tips:

  • Add delays (time.sleep()) to mimic human typing speed.
  • Avoid sending identical messages to multiple users to reduce spam flags.

Step 4: Putting It All Together

Run the script with your credentials and target recipient.

if __name__ == "__main__":  
    USERNAME = "your_instagram_username"  
    PASSWORD = "your_instagram_password"  
    RECIPIENT = "target_username"  
    MESSAGE = "Hey! Just testing a Python script. Hope you're well! 😊"  

    driver = login(USERNAME, PASSWORD)  
    send_dm(driver, RECIPIENT, MESSAGE)  

    # Close the browser after 5 seconds  
    time.sleep(5)  
    driver.quit()  

Potential Issues & Fixes

  1. Login Blocked:
    • Cause: Instagram detects automation.
    • Fix: Add longer delays between actions.
  2. Element Not Found:
    • Cause: Instagram updated its HTML/CSS.
    • Fix: Use updated XPaths via Chrome’s Developer Tools (Inspect Element).
  3. Two-Factor Authentication (2FA):
    • Manually handle 2FA prompts during the initial login.

Ethical Considerations

  • Limit Frequency: Send a few DMs per hour.
  • Personalize Messages: Avoid generic spam.
  • Monitor Account Health: Check for warnings from Instagram.

FAQs

Q1: Is this method safe?
A: While functional, automation violates Instagram’s Terms of Service. Use it sparingly and at your own risk.

Q2: Can I send DMs to multiple users?
A: Yes, but iterate carefully. Add delays and customize messages to avoid detection.

Q3: Why not use Instagram’s API?
A: Instagram’s API restricts DM capabilities for most developers. This workaround uses browser automation instead.

Q4: What if my account gets flagged?
A: Stop automation immediately. Appeal to Instagram via the app.

Q5: Are there alternatives to Selenium?
A: Tools like Puppeteer (JavaScript) exist, but Python+Selenium is beginner-friendly.


Conclusion

Automating Instagram DMs with Python is possible but comes with risks. By following this guide, you can experiment with browser automation while staying cautious. Prioritize account safety over convenience, and always respect platform rules.

Review & Discussion

Leave a Review

Please read our comment policy before submitting your comment. Your email address will not be used or publish anywhere. You will only receive comment notifications if you opt to subscribe below.