جذب دنبالکننده، افزایش تعاملات روزانه با لایک و کامنت یا پاکسازی صدها درخواست فالو بیپاسخ، به فعالیت مداوم و کلیکهای تکراری نیاز دارد. ساخت ربات اینستاگرام با پایتون این امکان را میدهد که تعاملات تکراری حساب کاربری را بر اساس معیارهای مشخص و بدون دخالت دست خودکار کنید.
نوشتن اسکریپتهای خودکارسازی مرورگر و کنترل عناصر وب به درک درست ساختار کدها، حلقهها و مدیریت خطاها نیاز دارد. به همین دلیل، تسلط بر مبانی این زبان از طریق یک آموزش برنامه نویسی پایتون پیشنیاز ورود به این پروژه عملی است.
منطق کار رباتهای اینستاگرام و دلیل استفاده از فریمورک سلنیوم (Selenium) را بررسی میکنیم. سپس کدهای کامل ورود خودکار به حساب، جستجوی کاربران، فالو کردن همراه با اسکرول صفحه و الگوریتم حذف درخواستهای فالو تأییدنشده را گامبهگام پیادهسازی خواهیم کرد. در پایان، با ابزار InstaPy و محدودیتهای امنیتی اینستاگرام نیز آشنا میشویم.
ربات اینستاگرام چگونه کار میکند و چرا به سلنیوم نیاز داریم؟
کاربران برای رشد صفحه خود و آموزش کامل اینستاگرام بهطور مداوم صفحات دیگر را دنبال میکنند، پستها را لایک میکنند و کامنت میگذارند. پلتفرمهای تجاری مختلفی مانند Instavast، Kicksta و Social Captain نیز بر همین اساس خدمات خودکارسازی و افزایش تعامل ارائه میدهند. ربات اینستاگرام با پایتون همین رفتار انسانی را بر اساس معیارهایی که برنامهنویس تعیین کرده است، تقلید و تکرار میکند.

اثربخشی ربات به هدفگذاری درست مخاطبان بستگی دارد. برای مثال، اگر صفحهای در زمینه فروش لباس زنانه فعالیت میکند، ربات باید برای هدفگیری پروفایلهای بانوان یا صفحاتی تنظیم شود که از هشتگهای مرتبط مانند #زیبایی، #مد، #پوشاک و #فشن (#beauty، #fashion، #clothes) استفاده میکنند تا احتمال جذب مخاطب واقعی بیشتر شود.
از نظر فنی، برای ساخت چنین رباتی نمیتوان از رابط برنامهنویسی کاربردی توسعهدهندگان اینستاگرام (Instagram Developer API) استفاده کرد؛ زیرا فعالیتهایی مانند ثبت کامنت، لایک کردن و فالو کردن مخاطبان توسط ربات در API رسمی اینستاگرام محدود شده است. به همین دلیل، راهحل جایگزین «خودکارسازی مرورگر» (Browser Automation) است که به این شکل کار میکند:
- اطلاعات احراز هویت، شامل نام کاربری (Username) و رمز عبور (Password)، در اختیار اسکریپت خودکارسازی قرار میگیرد.
- معیارهای هدف در کد تعریف میشود؛ یعنی اینکه ربات چه کسانی را فالو کند یا چه پستهایی را لایک کند.
- ربات یک مرورگر وب را باز میکند و آدرس وبسایت اینستاگرام را در نوار آدرس وارد میکند.
- در صفحه بازشده، اطلاعات هویتی را در فیلدهای مربوط مینویسد، وارد حساب کاربری میشود و دستورات تعریفشده را اجرا میکند.
برای پیادهسازی این فرایند از چارچوب نرمافزاری «سلنیوم» (Selenium) استفاده میکنیم. سلنیوم یک فریمورک متنباز تحت گواهینامه آپاچی ۲.۰ برای تست اپلیکیشنهای وب و خودکارسازی مرورگر است و روی سیستمعاملهای ویندوز، لینوکس و مکاواس اجرا میشود. این چارچوب علاوه بر پایتون، از زبانهای برنامهنویسی دیگری مانند جاوا، سیشارپ، روبی، پیاچپی، اسکالا، پرل و گرووی نیز پشتیبانی میکند.
سلنیوم از مؤلفههای مختلفی از جمله Selenium IDE، Selenium Client API، Selenium Remote Control، Selenium Grid و Selenium WebDriver تشکیل شده است. در این آموزش، تمرکز ما بر استفاده از وبدرایور سلنیوم برای کنترل مستقیم مرورگر خواهد بود.
پیشنیازهای ساخت ربات اینستاگرام با پایتون
پیش از نوشتن منطق اصلی ربات، باید محیط کدنویسی را با نصب کتابخانه سلنیوم، دریافت درایور مرورگر و فراخوانی ماژولهای مورد نیاز در پایتون آماده کنیم.
نصب کتابخانه سلنیوم و دانلود وبدرایور
ابتدا ترمینال یا خط فرمان (CMD) سیستمعامل خود (ویندوز، مک یا لینوکس) را باز کنید. سپس با اجرای دستور زیر، کتابخانه سلنیوم را نصب کنید:

pip install selenium
سلنیوم برای باز کردن لینکها و تعامل با وبسایت اینستاگرام به یک مرورگر و درایور رابط نیاز دارد. کدهای گامبهگام بخش بعدی این مقاله بر پایه مرورگر گوگل کروم نوشته شدهاند؛ بنابراین باید فایل اجرایی ChromeDriver را متناسب با سیستمعامل و نسخه مرورگر خود دانلود کنید. اگر فایرفاکس را ترجیح میدهید یا قصد کار با کتابخانه InstaPy را دارید، باید Firefox WebDriver را دریافت کنید. پس از دانلود فایل فشرده درایور، آن را از حالت زیپ خارج کنید و فایل استخراجشده را در پوشه پروژه، کنار فایل کد پایتون خود قرار دهید.
فراخوانی ماژولهای مورد نیاز در پایتون
پس از آمادهسازی درایور، یک فایل پایتون بسازید و ماژولهای زیر را با استفاده از دستور import در پایتون به اسکریپت خود اضافه کنید:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
import time
هر یک از این ماژولها وظیفه مشخصی در اجرای ربات دارند:
- webdriver: ماژول اصلی سلنیوم است که پنجره مرورگر (مانند کروم یا فایرفاکس) را باز و کنترل میکند.
- By: برای استخراج و مکانیابی عناصر صفحه وب از طریق نام کلاس (Class Name)، تگ، آیدی (ID)، سلکتورهای CSS یا مسیر XPath کاربرد دارد.
- Keys: هنگام اجرای ربات، امکان ارسال دادهها و شبیهسازی فشردن کلیدهای کیبورد از سمت کاربر به وبسایت را فراهم میکند.
- WebDriverWait: اجرای دستور را تا بارگذاری کامل یک عنصر خاص در صفحه به تعویق میاندازد تا کندی اینترنت یا بارگذاری صفحه باعث خطای پیدا نشدن عناصر نشود.
- time: برای ایجاد وقفههای زمانی چندثانیهای (sleep) بین اجرای دستورات استفاده میشود.
آموزش ساخت ربات اینستاگرام با پایتون (گامبهگام با سلنیوم)
با استفاده از وبدرایور کروم اسکریپتی مینویسیم که وارد حساب کاربری میشود، صفحه یک کاربر مشخص را جستجو میکند و فالوورهای او را خودکار دنبال میکند.
گام اول؛ ورود خودکار به حساب کاربری اینستاگرام
متغیرهای USERNAME و PASSWORD را با اطلاعات حساب کاربری خود مقداردهی میکنیم. با فراخوانی webdriver.Chrome() پنجره مرورگر کروم را باز میکنیم و سپس آدرس صفحه لاگین اینستاگرام را به متد driver.get() میدهیم.

برای وارد کردن نام کاربری و رمز عبور، ابتدا فیلدهای ورودی را با کمک By.XPATH پیدا میکنیم. استفاده از WebDriverWait با مهلت زمانی ۶۰ ثانیه و تعریف تابع بینام با lambda در پایتون باعث میشود اسکریپت تا بارگذاری فیلد نام کاربری منتظر بماند. پس از ارسال مقادیر با متد send_keys()، دکمه ورود (Login) را از طریق XPath پیدا میکنیم و روی آن کلیک میکنیم:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
import time
USERNAME = "YOUR USERNAME"
PASSWORD = "YOUR PASSWORD"
driver = webdriver.Chrome()
driver.get("https://www.instagram.com/accounts/login/")
# یافتن فیلد نام کاربری و وارد کردن مقدار
username = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[1]/div/label/input')
)
username.send_keys(USERNAME)
# یافتن فیلد رمز عبور و وارد کردن مقدار
password = driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[2]/div/label/input')
password.send_keys(PASSWORD)
# کلیک روی دکمه ورود
enter = driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[3]/button')
enter.click()
time.sleep(5)
# بستن پاپآپ ذخیره اطلاعات ورود (Not Now)
not_now = driver.find_element(By.CSS_SELECTOR, '._a9_1')
not_now.click()
time.sleep(5)
پس از ورود به اینستاگرام، گاهی پنجرهای (Pop-up) نمایش داده میشود که از کاربر میپرسد آیا مایل به ذخیره اطلاعات ورود است یا خیر. ذخیره این اطلاعات در اجرای بعدی اسکریپت کمکی به ربات نمیکند. به همین دلیل، دکمه «Not Now» را با استفاده از By.CSS_SELECTOR و کلاس ._a9_1 پیدا میکنیم و با کلیک روی آن، پنجره را میبندیم.
گام دوم؛ جستجوی کاربر هدف در اینستاگرام
در اسکریپت گام اول و پس از ورود به حساب، برای دسترسی به لیست دنبالکنندگان کاربر هدف، ابتدا آیکون جستجو (Search) را در نوار کناری سایت اینستاگرام با XPath پیدا میکنیم و روی آن کلیک میکنیم.
نام کاربری هدف را به جای عبارت “USERNAME” در متغیر search_user قرار میدهیم. وقتی نام کاربری در کادر جستجو (search_input) نوشته میشود، لیستی از پیشنهادها زیر آن به نمایش درمیآید. با انتخاب اولین عنصر این لیست (متغیر found) و کلیک روی آن، وارد صفحه کاربر هدف میشویم. کد کامل تا این مرحله به این صورت است:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
import time
USERNAME = "YOUR USERNAME"
PASSWORD = "YOUR PASSWORD"
driver = webdriver.Chrome()
driver.get("https://www.instagram.com/accounts/login/")
# یافتن فیلد نام کاربری و وارد کردن مقدار
username = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[1]/div/label/input')
)
username.send_keys(USERNAME)
# یافتن فیلد رمز عبور و وارد کردن مقدار
password = driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[2]/div/label/input')
password.send_keys(PASSWORD)
# کلیک روی دکمه ورود
enter = driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[3]/button')
enter.click()
time.sleep(5)
# بستن پاپآپ ذخیره اطلاعات ورود (Not Now)
not_now = driver.find_element(By.CSS_SELECTOR, '._a9_1')
not_now.click()
time.sleep(5)
# جستجوی کاربر هدف
search = driver.find_element(
By.XPATH,
'/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div/div/div/div[2]/div[2]/span/div/a'
)
search.click()
search_user = "USERNAME"
search_input = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_element(
By.XPATH,
'/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div/div[2]/div/div/div[2]/div/div/div[1]/div/div/input'
)
)
search_input.send_keys(search_user)
found = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_element(
By.XPATH,
'/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div/div[2]/div/div/div[2]/div/div/div[2]/div/a/div[1]'
)
)
found.click()
گام سوم؛ تعامل و فالو کردن خودکار فالوورها همراه با اسکرول
در گام سوم، پس از کدهای مرحله قبل، ابتدا بخش فالوورها (followers) را در صفحه کاربر هدف با XPath پیدا میکنیم و روی آن کلیک میکنیم تا پنجره لیست دنبالکنندگان باز شود. سپس دکمههای Follow قابل مشاهده در نمای فعلی صفحه را با استفاده از By.CSS_SELECTOR و سلکتور ‘button._acan._acap._acas’ استخراج میکنیم و در متغیر buttons قرار میدهیم. کد کامل و یکپارچه ربات از ابتدا تا این مرحله به این صورت است:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
import time
USERNAME = "YOUR USERNAME"
PASSWORD = "YOUR PASSWORD"
driver = webdriver.Chrome()
driver.get("https://www.instagram.com/accounts/login/")
# یافتن فیلد نام کاربری و وارد کردن مقدار
username = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[1]/div/label/input')
)
username.send_keys(USERNAME)
# یافتن فیلد رمز عبور و وارد کردن مقدار
password = driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[2]/div/label/input')
password.send_keys(PASSWORD)
# کلیک روی دکمه ورود
enter = driver.find_element(By.XPATH, '//*[@id="loginForm"]/div/div[3]/button')
enter.click()
time.sleep(5)
# بستن پاپآپ ذخیره اطلاعات ورود (Not Now)
not_now = driver.find_element(By.CSS_SELECTOR, '._a9_1')
not_now.click()
time.sleep(5)
# جستجوی کاربر هدف
search = driver.find_element(
By.XPATH,
'/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div/div/div/div[2]/div[2]/span/div/a'
)
search.click()
search_user = "USERNAME"
search_input = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_element(
By.XPATH,
'/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div/div[2]/div/div/div[2]/div/div/div[1]/div/div/input'
)
)
search_input.send_keys(search_user)
found = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_element(
By.XPATH,
'/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[1]/div/div/div[2]/div/div/div[2]/div/div/div[2]/div/a/div[1]'
)
)
found.click()
# باز کردن لیست فالوورها و فالو کردن خودکار همراه با اسکرول
followers = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_element(
By.XPATH,
'/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[2]/div[2]/section/main/div/header/section/ul/li[2]/a'
)
)
followers.click()
time.sleep(10)
buttons = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_elements(By.CSS_SELECTOR, 'button._acan._acap._acas')
)
time.sleep(5)
count = 0
while True:
for btn in buttons:
try:
driver.execute_script("arguments[0].click();", btn)
count += 1
print(f"{count} buttons clicked")
time.sleep(5)
except:
print("Skipped something")
pass
scr1 = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_element(
By.XPATH,
'/html/body/div[1]/div/div/div/div[2]/div/div/div[1]/div/div[2]/div/div/div/div/div[2]/div/div/div[2]'
)
)
time.sleep(5)
driver.execute_script("arguments[0].scrollTop = arguments[0].scrollHeight", scr1)
print("scrollled")
buttons = WebDriverWait(driver, timeout=60).until(
lambda d: d.find_elements(By.CSS_SELECTOR, 'button._acan._acap._acas')
)
درون حلقه while True، حلقه for روی تکتک دکمههای یافتشده حرکت میکند و با متد driver.execute_script(“arguments[۰].click();”, btn) روی آنها کلیک میکند. متغیر count تعداد کاربران فالوشده را میشمارد. بلوک try-except نیز باعث میشود اگر دکمهای در دسترس یا قابل کلیک نیست، برنامه متوقف نشود و از آن عبور کند.
پس از فالو کردن کاربران موجود در نمای فعلی، نوبت به اسکرول کردن پنجره فالوورها میرسد. برای این کار، عنصر پنجره اسکرول (scr1) را با XPath میگیریم و با دستور جاوااسکریپت arguments[۰].scrollTop = arguments[۰].scrollHeight به اندازه ارتفاع پنجره به پایین اسکرول میکنیم. پس از اسکرول، لیست جدید دکمههای فالو دوباره با CSS Selector دریافت میشود و این چرخه در حلقه while تکرار میشود.
ساخت ربات حذف درخواستهای فالو بیپاسخ (Follow Requests)
یکی دیگر از کاربردهای عملی ساخت ربات اینستاگرام با پایتون، پاکسازی لیست درخواستهای دنبالکردنی است که صفحات خصوصی (Private) آنها را تأیید نکردهاند. در حالت عادی، اگر وارد بخش current follow requests در اینستاگرام شوید، برای حذف دستی هر درخواست باید آیدی فرد را کپی کنید و در مرورگر، پس از آدرس اینستاگرام وارد کنید. سپس باید وارد صفحه او شوید، روی گزینه Requested کلیک کنید و او را Unfollow کنید. تکرار این کار برای صدها یا نزدیک به ۱۰۰۰ آیدی زمانبر است.

با همان روش کار با سلنیوم در بخش قبل، میتوانیم این فرایند را نیز طبق الگوریتم زیر خودکار کنیم:
- ورود به حساب کاربری: ربات مانند گام اول در بخش قبل مرورگر را باز میکند، کادر نام کاربری و رمز عبور را با XPath پیدا میکند و پس از وارد کردن اطلاعات، روی دکمه Login کلیک میکند.
- رفتن مستقیم به صفحه درخواستها: پس از لاگین و مشاهده صفحه ذخیره اطلاعات (Save Info یا Not Now)، نیازی به کلیک روی هیچکدام از این دو گزینه نیست. کافی است با یک دستور، ربات را مستقیماً به آدرس صفحه نهایی، یعنی current follow requests، هدایت کنید.
- کلیک خودکار روی دکمه View More: در صفحه درخواستهای فالو، تمام آیدیها یکجا نمایش داده نمیشوند و باید چندین بار روی دکمه View More کلیک شود. برای این کار، یک حلقه در پایتون تعریف میکنیم تا به تعداد مشخص روی عنصر View More کلیک کند و لیست آیدیها بارگذاری شود؛ مثلاً عدد ۶ را در بازه حلقه قرار میدهیم تا ۵ بار کلیک متوالی انجام دهد. میتوانید این عدد را متناسب با تعداد درخواستهای خود تغییر دهید.
- استخراج و ذخیره آیدیها در لیست: اگر ساختار XPath چند آیدی موجود در این صفحه را بررسی کنید، مشاهده خواهید کرد که الگوی XPath آنها یکسان است. بنابراین ربات میتواند نامهای کاربری بارگذاریشده را استخراج و در یک لیست پایتون ذخیره کند.
- باز کردن صفحات و آنفالو کردن: در مرحله پایانی، ربات در یک حلقه، بهترتیب وارد آدرس صفحه تکتک آیدیهای ذخیرهشده در لیست میشود. سپس مانند روش دستی، روی دکمه مربوط کلیک میکند و حساب را Unfollow میکند تا لیست درخواستهای بیپاسخ خالی شود.
آشنایی با ابزار InstaPy برای خودکارسازی اینستاگرام
برای خودکارسازی فعالیتهای اینستاگرام با پایتون، علاوه بر نوشتن مستقیم اسکریپتهای سلنیوم از صفر، کتابخانه تخصصیتری به نام اینستاپای (InstaPy) نیز وجود دارد. در آموزش instapy باید توجه داشت که این ابزار در هسته خود از همان فریمورک سلنیوم برای کنترل مرورگر استفاده میکند. مفاهیم خودکارسازی مرورگر و الگوی شی صفحه (Page Object Pattern) پایه کار با آن هستند.
نوع مرورگر پشتیبان هنگام استفاده از InstaPy نکته فنی مهمی است. نسخه آخر اینستاپای دیگر از مرورگر گوگل کروم (Chrome) پشتیبانی نمیکند. بنابراین برای اجرای پروژه با InstaPy، باید مرورگر فایرفاکس (Firefox) و درایور اختصاصی آن، یعنی Firefox WebDriver، را روی سیستم خود نصب داشته باشید.
در پروژههای پیشرفتهتر خودکارسازی، امکان اجرای مرورگر وب بدون واسط گرافیکی (Headless) و بهرهگیری از هوش مصنوعی با پایتون برای تحلیل پستها و هدفگیری دقیقتر مخاطبان وجود دارد؛ موضوعی که مسیر را برای استفاده از ابزارهای هوش مصنوعی برای برنامهنویسی جهت مدیریت هوشمندتر تعاملات باز میکند.
محدودیتها و نکات امنیتی در استفاده از ربات اینستاگرام
هنگام اجرای کدهای ربات اینستاگرام باید به قوانین و محدودیتهای امنیتی این پلتفرم توجه داشته باشید:

- محدودیت فالو همزمان: به دلیل دستورالعملها و امنیت ارتقایافته اینستاگرام، این شبکه اجتماعی اجازه نمیدهد تعداد زیادی حساب کاربری را همزمان و پشت سر هم دنبال کنید.
- شناسایی فعالیت مشکوک: اینستاگرام بهطور مداوم سیستمهای امنیتی خود را بهروزرسانی میکند و فعالیتهای خودکار ربات را تشخیص میدهد و حساب را با عنوان «فعالیت مشکوک» (Suspicious activity) علامتگذاری یا مسدود میکند.
- مقررات پلتفرم: استفاده از ربات برای تعاملات خودکار خلاف قوانین اینستاگرام است. بنابراین توصیه میشود از این اسکریپتها صرفاً برای یادگیری مفاهیم خودکارسازی وب و اهداف آموزشی استفاده کنید.
اگر به توسعه رباتهای کاربردی در پلتفرمهایی علاقه دارید که API رسمی و آزادی عمل گستردهای در اختیار برنامهنویسان قرار میدهند، میتوانید سراغ تلگرام بروید.
——