آموزش ساخت ربات اینستاگرام با پایتون | از صفر تا صد
در این مطلب، آموزش ساخت ربات اینستاگرام با پایتون ارائه شده است. اما پیش از پرداختن به موضوع اصلی این مطلب یعنی آموزش ساخت ربات اینستاگرام با پایتون مبحث پایهایتر روش کار رباتهای اینستاگرام مورد بررسی قرار خواهد گرفت. سپس، «چارچوب نرمافزاری» (فریمورک | Framework) «سلنیوم» (Selenium) و چگونگی خودکارسازی (Automate) مرورگر با استفاده از آن، بررسی میشود. پس از بررسی روش خودکارسازی مرورگر با استفاده از چارچوب سلنیوم، روش استفاده از «الگوی شی صفحه» (Page Object Pattern) برای خوانایی و تستپذیری صفحه تشریح و در نهایت، آموزش ساخت ربات اینستاگرام با پایتون و با استفاده از ابزار «اینستاپای» (InstaPy) ارائه میشود.
آموزش ساخت ربات اینستاگرام با پایتون
وجه شباهت برخی از شرکتهای فعال در حوزه «شبکههای اجتماعی» (Social Networks) شامل «اینستاوست» (Instavast)، «سوشال مدیا اکسپلورر» (Social Media Explorer) و «کیکستا» (Kicksta) در چیست؟ پیش از پاسخ دادن به این پرسش و پرداختن به موضوع اصلی این مطلب یعنی آموزش ساخت ربات اینستاگرام با پایتون توضیحات اجمالی پیرامون زمینه فعالیت و خدمات شرکتهای مذکور ارائه میشود.
اینستاوَست
«اینستاوست» (Instavast) یک وبسایت خدمات و محصولات در حوزه شبکه اجتماعی اینستاگرام است که «ربات اینستاگرام» (Instagram Bot)، «پاسخدهی خودکار پیام خصوصی» (Automate Instagram Direct Messages | Auto
DM)، «ردیاب نظرات» (Comment Tracker) و «زمانبند پستها» (Post Scheduler) ارائه میکند. همچنین، «مولد هشتگ» (Hashtag Generator)، «هشتگهای ممنوع شده» (Banned Hashtags)، «دانلود از اینستاگرام» (Instagram Downloader) و «مبدل نام کاربری به شناسه» (Username to ID Convertor) از جمله عناوین خدمات رایگانی محسوب میشوند که توسط این وبسایت ارائه میشود.
کیکستا
«کیکستا» (Kicksta) که نام آن در واقع از عبارت «کیک استارت» (Kick Start) گرفته شده، همانطور که از نام آن نیز مشخص است، جرقه شروع و به بیان بهتر، ضربه اولیه شروع رشد را برای صفحات اینستاگرام افرادی فراهم میکند که در صدد جذب دنبالکنندگان و مشارکت آنها هستند. این شرکت به اذعان خود، با بهرهگیری از یک «فناوری هوش مصنوعی» (Artificial Intelligence Technology) و بدون استفاده از رباتها، «دنبالکنندگان جعلی» (Fake Followers) و «هرزنامه» (Spam)، تعداد دنبالکنندگان و میزان مشارکت مخاطبان برای یک اکانت را افزایش میدهد.
سوشال کپتن
«سوشال کپتن» (Social Captain) یک پلتفرم خودکارسازی اینستاگرام است که خدماتی شامل افزایش دنبالکنندگان، افزایش تعامل مخاطبان شامل «پسندها» (Likes) و «نظرات» (Comments)، تحلیلها و گزارشهای زمان واقعی و برخی از دیگر موارد را ارائه میکند.
اکنون، به پرسشی که در ابتدای این بخش مطرح شد، یعنی بیان شباهتهای این چند شرکت و سایر شرکتهای فعال در حوزه شبکههای اجتماعی با رسالت اینچنینی، پاسخ داده خواهد شد. چنانچه مشخص است، همه این شرکتها به افراد کمک میکنند تا در شبکههای اجتماعی گوناگون از جمله اینستاگرام، دامنه مخاطبهای خود یا همان دنبالکنندگان و البته، میزان مشارکت آنها (ٍEngagement) را افزایش دهند. اینکه چرا سازمانها یا افراد در صدد افزایش دنبالکنندگان و تعاملات آنها در شبکههای اجتماعی خود هستند، دلایل گوناگونی دارد. از جمله این دلایل برای سازمانها میتوان به برندسازی، افزایش آگاهی از برند در جامعه، افزایش فروش محصولات و خدمات و دیگر موارد اشاره کرد. افراد نیز با هدف افزایش شهرت و حتی مبدل کردن صفحات خود به جایگاهی تبلیغاتی که در آن با دریافت هزینه از مراکز مختلف اقدام به ساخت و انتشار محتوا میکنند، در صدد افزایش فالورها و مشارکت آنها هستند. اینها تنها بخش کوچکی از حجم انبوه دلایلی است که افراد به خاطر آنها به دنبال راهکارهای افزایش مخاطب و مشارکت مخاطبان هستند.
همانطور که از توضیحات ارائه شده پیرامون شرکتهای گوناگون فعال در حوزه شبکههای اجتماعی مشخص است، یکی از گزینههای جذابی که افراد برای مدیریت و رشد شبکههای اجتماعی خود به آن نیاز دارند، ربات است. بنابراین، در ادامه این مطلب، آموزش ساخت ربات اینستاگرام با پایتون ارائه میشود. با بهرهگیری از این راهنما، مخاطبان با آموزش ساخت ربات اینستاگرام با پایتون و با استفاده از ابزار اینستاپای (InstaPy) آشنا میشوند تا بتوانند فعالیتهای صفحه اینستاگرام خود را خودکار کنند و بدین شکل، دنبالکنندگان و میزان مشارکت آنها را با کمی دستکاری، افزایش دهند. ضمن مطالعه این مطلب، افراد با چگونگی «خودکارسازی مرورگر وب» (Web Browser Automation) با استفاده از سلنیوم و الگوی شی صفحه آشنا میشوند که مبنایی برای فراگیری و کار با اینستاپای (InstaPy) محسوب میشود. به طور کلی، افراد با مطالعه مطلب آموزش ساخت ربات اینستاگرام با پایتون موضوعات زیر را خواهند آموخت.
- روش کار رباتها در اینستاگرام
- آشنایی با چارچوب نرمافزاری سلنیوم
- روش خودکارسازی مرورگر با سلنیوم
- روش استفاده از «الگوی شی صفحه» (Page Object Pattern) برای بهبود «خوانایی» (Readability) و «قابلیت تست» (قابلیت آزمون | Testability)
- آشنایی با ابزار اینستاپای (InstaPy)
- آموزش ساخت ربات اینستاگرام با پایتون و کتابخانه اینستاپای
ربات اینستاگرام چگونه کار میکند؟
یک «اسکریپت» (Script) خودکارسازی چگونه میتواند موجب شود که یک صفحه کاربری در اینستاگرام، دنبالکنندگان و پسندهای (Likes) بیشتری به دست بیاورد؟ پیش از پاسخ به این پرسش و ارائه آموزش ساخت ربات اینستاگرام با پایتون باید به مکانیزم واقعی اندیشید که افراد از طریق آن دنبالکننده و لایک (Like) به دست میآورند.
اشخاص در حالت عادی، با فعالیت مداوم در یک شبکه اجتماعی دنبال کننده جذب میکنند و مشارکت آنها را به دست میآورند. آنها اغلب، افراد دیگر را دنبال و مطالب آنها را پسند یا اصطلاحا لایک میکنند و برای پستهای دیگر افراد، نظر (Comment) درج میکنند. رباتها نیز کار جذب مخاطب و مشارکت آنها را به شیوه دقیقا مشابهی انجام میدهند. در واقع، رباتها بر اساس معیارهایی که نویسنده ربات برای آنها تعریف کرده است، به طور مداوم دیگران را دنبال، آنها را لایک و برای پستهای منتشر شده، نظر درج میکنند.
هر چه معیاری که برنامهنویس ربات برای آن تنظیم میکند بهتر در نظر گرفته شده باشد، نتایج بهتری نیز حاصل میشود. لذا برنامهنویس ربات باید اطمینان حاصل کند که ربات نوشته شده توسط او، گروه درستی از افراد را مورد هدف قرار داده است؛ زیرا این ربات بیشتر بر اساس محتوایی که صاحب صفحه در صفحه خود درج میکند، به تعامل با دیگران میپردازد.
برای مثال، فردی که لباس زنانه در اینستاگرام خود به فروش میرساند، باید ربات خود را به گونهای بسازد که پرفایلهای بانوان را دنبال و برای پستهای آنها لایک و نظر درج کند و یا، این فعالیتها را برای پروفایلهایی انجام دهد که از هشتگهایی مانند #زیبایی، #مد، #پوشاک و #فشن (beauty ،#fashion ،#clothes#) استفاده میکنند. این امر موجب میشود تا مخاطب هدف، با احتمال بیشتری به صفحه اینستاگرام فروش لباس جذب شود، آن را دنبال و شروع به تعامل با پستهای آن کند.
اما از دیدگاه فنی، این ربات اینستاگرام چگونه کار میکند؟ شایان توجه است که برای ساخت ربات جذب دنبال کننده و تعامل در اینستاگرام، نمیتوان از «رابط برنامهنویسی کاربردی توسعهدهنده اینستاگرام» (Instagram Developer API) استفاده کرد، زیرا انجام فعالیتهای بیان شده شامل درج نظر و لایک و دنبال کردن مخاطب توسط ربات، در API توسعهدهندگان اینستاگرام محدود شده است. بنابراین باید از خودکارسازی مرورگر (Browser Automation) استفاده کرد. خودکارسازی مرورگر به صورت زیر عمل میکند.
- اطلاعات احراز هویت (شامل نام کاربری و گذرواژه) به خودکارسازی مرورگر (Browser Automation) داده میشود.
- معیارهایی برای ربات تعیین میشود که به او میگوید چه کسانی را دنبال، برای چه کسانی نظر و برای چه نوع پستهایی لایک درج کند.
- ربات یک مرورگر را باز، در صفحه باز شده و در قسمت نوار آدرس، آدرس وبسایت اینستاگرام را درج میکند. سپس، در صفحه باز شده، با استفاده از اطلاعات هویتی شامل «نام کاربری» (Username) و «گذرواژه» (رمز عبور | Password) که در اختیار ربات قرار داده شده است، وارد حساب کاربری فرد میشود و شروع به انجام دادن کارهایی میکند که به او دستور داده شده است.
در بخش بعدی از مطلب آموزش ساخت ربات اینستاگرام با پایتون معرفی مقدماتی پیرامون چارچوب نرمافزاری «سلنیوم» (Selenium) انجام میشود.
چارچوب نرمافزاری سلنیوم
«سلنیوم» (Selenium) یک چارچوب نرمافزاری (فریمورک | Framework) وب برای «آزمودن برنامههای کاربردی وب» (تست اپلیکیشنهای وب) است. در واقع، سلنیوم یک ابزار بازپخش (Playback) برای نوشتن تستهای تابعی (Functional Tests) بدون نیاز به یادگیری یک زبان اسکریپتنویسی تست است. همچنین، سلنیوم یک زبان ویژه دامنه تستنویسی (Test Domain-Specific Language) به نام «سلنز» (Selenese) برای نوشتن تست در تعدادی از زبانهای برنامهنویسی محبوب را فراهم میکند. از جمله این زبانها میتوان به «پایتون» (Python)، «روبی» (Ruby)، «جاوا» (Java)، «اسکالا» (Scala)، «پرل» (Perl)، «گرووی» (Groovy)، «پیاچپی» (PHP) و «سیشارپ» (C#) اشاره کرد. این تستها روی اغلب «مرورگرهای وب» (Web Browsers) مدرن، قابل اجرا هستند.
فریم ورک سلنیوم روی سیستمعاملهای «لینوکس» (Linux)، «ویندوز» (Windows) و «مکاواس» (macOS) اجرا میشود. شایان توجه است که فریم ورک سلنیوم یک نرمافزار «متنباز» (Open Source) است که تحت گواهینامه آپاچی ۲.۰ منتشر میشود. سلنیوم از مولفههای (Components) گوناگونی تشکیل شده است که هر یک از آنها نقش ویژهای در توسعه خودکارسازی تست نرمافزارهای وب دارند. مولفههای چارچوب نرمافزاری سلنیوم در ادامه بیان شدهاند.
- محیط توسعه یکپارچه سلنیوم (Selenium IDE)
- رابط برنامهنویسی کاربردی مخدوم سلنیوم (Selenium client API)
- وبدرایور سلنیوم (Selenium WebDriver)
- کنترل از راه دور سلنیوم (Selenium Remote Control)
- شبکه سلنیوم (Selenium Grid)
در بخش بعدی از مطلب آموزش ساخت ربات اینستاگرام با پایتون چگونگی خودکارسازی مرورگر با استفاده از چارچوب نرمافزاری سلنیوم آموزش داده شده است.
روش خودکارسازی مرورگر
برای این نسخه از ربات اینستاگرام، از سلنیوم استفاده شده است. شایان توجه است که ابزار اینستاپای (InstaPy) در دل خود از سلنیوم استفاده میکند. ابتدا، باید سلنیوم را نصب کرد. در طول نصب، باید اطمینان حاصل کرد که «وبدرایور فایرفاکس» (Firefox WebDriver) نصب شده است. شایان توجه است که اینستاپای در نسخه آخر خود، دیگر از مرورگر وب کروم (Chrome) استفاده نمیکند. این به نوبه خود بدین معنا است که برای انجام این پروژه، فرد حتما باید مرورگر وب فایرفاکس (FireFox) را روی سیستم خود نصب داشته باشد. اکنون، باید یک فایل پایتون ساخته و کد زیر در آن نوشته شود.
1from time import sleep
2from selenium import webdriver
3
4browser = webdriver.Firefox()
5
6browser.get('https://www.instagram.com/')
7
8sleep(5)
9
10browser.close()
با اجرای کد بالا، میتوان مشاهده کرد که مرورگر وب باز میشود و به صفحه ورود اینستاگرام میرود. در ادامه، توضیحات خط به خط پیرامون کد بالا ارائه شده است.
- خط ۱ و ۲: sleep و webdriver وارد میشوند.
- خط ۴: آمادهسازی اولیه درایور فایرفاکس انجام و روی browser تنظیم میشود.
- خط ۶: آدرس اینستاگرام را در نوار آدرس مرورگر نوشته و ورود (Enter) را میزند (آدرس نوشته شده را اعمال میکند).
- خط ۸: به مدت پنج ثانیه منتظر میماند، بنابراین، میتوان نتایج را مشاهده کرد. در غیر این صورت، مرورگر را به صورت آنی میبندد.
- خط ۱۰: مرورگر را میبندد.
آنچه نوشته شد، همان Hello World معروف زبانهای برنامهنویسی، اما در دنیای سلنیوم و ویژه آن است. اکنون، میتوان قطعه کد مربوط به قسمتی که موجب میشود برنامه در حساب کاربری فرد وارد شود را نوشت و به کد اصلی اضافه کرد. اما ابتدا، باید بررسی کرد که عامل انسانی در حالت عادی چگونه وارد حساب کاربری خود میشود. الگوریتم ساده این کار در ادامه آمده است.
- به آدرس وب اینستاگرام میرود.
- روی لینک ورود (Login) کلیک میکند.
- اطلاعات هویتی خود شامل نام کاربری و رمز عبور را وارد میکند.
- روی دکمه ورود (Login) کلیک میکند.
اولین گام بیان شده در روش انسانی ورود به اینستاگرام، در قطعه کد نوشته شده در بالا نیز انجام میشود. اکنون میتوان کد بالا را به گونهای تغییر داد که روی لینک ورود (Login) در صفحه خانگی اینستاگرام (Instagram Home Page) کلیک کند.
1from time import sleep
2from selenium import webdriver
3
4browser = webdriver.Firefox()
5browser.implicitly_wait(5)
6
7browser.get('https://www.instagram.com/')
8
9login_link = browser.find_element_by_xpath("//a[text()='Log in']")
10login_link.click()
11
12sleep(5)
13
14browser.close()
در ادامه، خطهای کد جدید توضیح داده میشوند.
- خط ۵: پنج ثانیه زمان انتظار ایجاد میکند. اگر سلنیوم نتواند یک عنصر (Element) را پیدا کند، برای مدت پنج ثانیه در انتظار میماند تا امکان بارگذاری همه چیز فراهم شود و مجددا تلاش کند.
- خط ۹: عنصر <a> را که متن آن معادل ورود یا همان Log in است پیدا میکند. در اینجا، این کار با استفاده از XPath انجام میشود؛ اما متدهای دیگری نیز وجود دارند که با استفاده از آنها نیز میتوان این کار را انجام داد.
- خط ۱۰: روی عنصر <a> برای صفحه ورود (login) کلیک میکند.
با اجرای اسکریپت بالا، میتوان خروجی آن را مشاهده کرد. این اسکریپت، مرورگر را باز میکند، به اینستاگرام میرود، روی دکمه ورود (Login) کلیک میکند و به صفحه ورود به اینستاگرام میرود. در صفحه ورود، سه عنصر مهم وجود دارد که عبارتند از:
- بخش ورود نام کاربری
- بخش ورود رمز عبور
- دکمه ورود
اکنون باید اسکریپت را به گونهای تغییر داد که این عناصر را پیدا کند، اطلاعات هویتی صاحب صفحه کاربری شامل نام کاربری و گذرواژه را وارد و روی دکمه ورود (Login) کلیک کند.
1from time import sleep
2from selenium import webdriver
3
4browser = webdriver.Firefox()
5browser.implicitly_wait(5)
6
7browser.get('https://www.instagram.com/')
8
9login_link = browser.find_element_by_xpath("//a[text()='Log in']")
10login_link.click()
11
12sleep(2)
13
14username_input = browser.find_element_by_css_selector("input[name='username']")
15password_input = browser.find_element_by_css_selector("input[name='password']")
16
17username_input.send_keys("<your username>")
18password_input.send_keys("<your password>")
19
20login_button = browser.find_element_by_xpath("//button[@type='submit']")
21login_button.click()
22
23sleep(5)
24
25browser.close()
در ادامه، توضیحاتی پیرامون خطوط کد تغییر یافته و جدید ارائه شده است.
- خط ۱۲: برای ۲ ثانیه به خواب میرود تا امکان بارگذاری صفحه فراهم شود.
- خطوط ۱۴ و ۱۵: ورودیهای نامکاربری و رمز عبور را با استفاده از CSS پیدا میکند. کاربر میتواند از هر متد دیگری که ترجیح میدهد، برای انجام این کار استفاده کند.
- خطوط ۱۷ و ۱۸: نام کاربری و رمز عبور را به ترتیب در محل ورود آنها وارد میکند.
- خط ۲۰: کلمه «Login» را با XPath پیدا میکند.
- خط ۲۱: روی دکمه ورود کلیک میکند.
با اجرای این اسکریپت، به صورت خودکار وارد حساب کاربری اینستاگرام فرد میشود. اکنون زمان شروع کار جدیتر با ربات اینستاگرام رسیده است. ادامه فرایند نوشتن این اسکریپت و تکمیل آن نیز، مشابه آنچه است که تا این لحظه انجام شده است. در واقع، ربات (اسکریپت) در ادامه پستها را پیمایش (Scroll)، مواردی که به آنها علاقه دارد (بر اساس معیارهایی که به آن داده شده است) را پس از پیدا کردن دکمه «Like» لایک و پس از پیدا کردن جعبه درج نظر، لایک یا برای آنها نظر درج میکند و به همین ترتیب ادامه میدهد. کلیه فعالیتهای ذکر شده را میتوان با استفاده از ابزار InstaPy انجام داد. اما پیش از استفاده از InstaPy باید با Page Object Pattern آشنا شد تا بهتر فهمید که InstaPy چگونه کار میکند. در بخش بعدی از مطلب آموزش ساخت ربات اینستاگرام با پایتون روش استفاده از Page Object Pattern بررسی میشود.
روش استفاده از Page Object Pattern
پرسشی که در این مرحله باید به آن پاسخ داد این است که اکنون که کد ورود (Login) نوشته شد، چطور میتوان یک تست برای آن نوشت؟ کد مربوط به این کار به صورت زیر است.
1def test_login_page(browser):
2 browser.get('https://www.instagram.com/accounts/login/')
3 username_input = browser.find_element_by_css_selector("input[name='username']")
4 password_input = browser.find_element_by_css_selector("input[name='password']")
5 username_input.send_keys("<your username>")
6 password_input.send_keys("<your password>")
7 login_button = browser.find_element_by_xpath("//button[@type='submit']")
8 login_button.click()
9
10 errors = browser.find_elements_by_css_selector('#error_message')
11 assert len(errors) == 0
کد نوشته شده در بالا، یک خطای مهم دارد و آن خطا، عدم تبعیت از اصول «خودت را تکرار نکن» (Don't Repeat Yourself | DRY) است. بر اساس این اصل که در برنامهنویسی وجود دارد، برنامهنویس نباید یک یا چند خط کد را در مکانهای مختلف برنامه خود تکرار کند. در این راستا، برنامهنویسان معمولا از برنامهنویسی «تابعی» (Functional Programming) یا «شیگرا» (Object Oriented) استفاده میکنند. در قطعه کدهای ارائه شده تا این لحظه در مطلب آموزش ساخت ربات اینستاگرام با پایتون چند خط کد وجود دارد که هم در برنامه کاربردی و هم در کد تست تکرار شده است.
قرار دادن کدهای تکراری در پروژهها در حالت کلی اتفاقی بد و منفی است و در پروژه مطلب آموزش ساخت ربات اینستاگرام با پایتون به طور ویژهای بدتر محسوب میشود. زیرا کد سلنیوم به عناصر «رابط کاربری» (User Interface) وابسته است و عناصر رابط کاربری معمولا زیاد تغییر داده میشوند. هنگامی که عناصر رابط کاربری تغییر میکنند و نیاز به تغییر و به روز رسانی کد ایجاد میشود، بحث Page Object Pattern مطرح میشود. با این الگو (Pattern)، کلاسهای شی صفحه (Page Object Classes) برای مهمترین صفحات یا قسمتها (Fragments) ساخته میشوند و در واقع رابطهایی را شکل میدهند که برای برنامه قابل درک است. با در نظر داشتن این موضوع، میتوان کد بالا را بازنویسی کرد و کلاسهای HomePage و LoginPage را ساخت.
1from time import sleep
2
3class LoginPage:
4 def __init__(self, browser):
5 self.browser = browser
6
7 def login(self, username, password):
8 username_input = self.browser.find_element_by_css_selector("input[name='username']")
9 password_input = self.browser.find_element_by_css_selector("input[name='password']")
10 username_input.send_keys(username)
11 password_input.send_keys(password)
12 login_button = browser.find_element_by_xpath("//button[@type='submit']")
13 login_button.click()
14 sleep(5)
15
16class HomePage:
17 def __init__(self, browser):
18 self.browser = browser
19 self.browser.get('https://www.instagram.com/')
20
21 def go_to_login_page(self):
22 self.browser.find_element_by_xpath("//a[text()='Log in']").click()
23 sleep(2)
24 return LoginPage(self.browser)
این کد، عملکردی مشابه کد بالا دارد، با این تفاوت که Home Page و Login Page به صورت کلاسها نمایش داده شدهاند. کلاسها، مکانیزمهای لازم برای پیدا کردن دادهها در رابط کاربری و دستکاری آنها را کپسوله کردهاند. مورد دیگری که باید به آن توجه داشت، آن است که هنگام جا به جایی به صفحهای دیگر با استفاده از یک شی صفحه (Page Object)، این کد، Page Object برای صفحه جدید را باز میگرداند. «متدها» (Methods) و «اکسسورهایی» (Accessors) نیز وجود دارند که میتوانند هر آنچه یک انسان انجام میدهد را انجام دهند. باید به مقدار بازگردانده شده توسط go_to_log_in_page() توجه داشت. اگر کلاس دیگری به نام FeedPage وجود داشت، تابع login() از کلاس LoginPage نمونهای از آن را (return FeedPage()) باز میگرداند. در ادامه، چگونگی استفاده از Page Object Pattern نمایش داده شده است.
1from selenium import webdriver
2
3browser = webdriver.Firefox()
4browser.implicitly_wait(5)
5
6home_page = HomePage(browser)
7login_page = home_page.go_to_login_page()
8login_page.login("<your username>", "<your password>")
9
10browser.close()
اکنون کد بهبود یافته است و تست بالا را میتوان به صورت زیر بازنویسی کرد.
1def test_login_page(browser):
2 home_page = HomePage(browser)
3 login_page = home_page.go_to_login_page()
4 login_page.login("<your username>", "<your password>")
5
6 errors = browser.find_elements_by_css_selector('#error_message')
7 assert len(errors) == 0
با تغییرات انجام شده در کدها، حتی در صورتی که تغییراتی در رابطه کاربری برنامه اتفاق بیفتد، دیگر نیازی به تغییر کدهای تست نیست. اکنون که مفهوم و چگونگی کار با سلنیوم (Selenium) و Page Object Pattern تشریح و شفاف شد، میتوان به آموزش ساخت ربات اینستاگرام با پایتون پرداخت. اما پیش از ارائه آموزش ساخت ربات اینستاگرام با پایتون ابزار اینستاپای (Instapy) به طور اجمالی مورد بررسی قرار خواهد گرفت.
آشنایی با InstaPy
«اینستاپای» (InstaPy) بزرگترین و محبوبترین ابزار خودکارسازی موجود برای اینستاگرام به شمار میآید که به به صورت رایگان در دسترس است. طیف وسیعی از ویژگیها وجود دارد که منجر شدهاند اینستا به ابزاری درجه یک برای افزایش تعداد دنبال کنندگان در اینستاگرام مبدل شود. در بخش بعدی، آموزش ساخت ربات اینستاگرام با پایتون و اینستاپای ارائه میشود.
آموزش ساخت ربات اینستاگرام با پایتون و InstaPy
در این بخش، آموزش ساخت ربات اینستاگرام با پایتون و ابزار اینستاپای ارائه شده است. این ربات میتواند به صورت خودکار لایک بزند، افراد را دنبال و برای پستهای مختلف نظر درج کند. در این راستا، ابتدا باید اینستاپای را نصب کرد. دستور زیر کار نصب اینستاپای (InstaPy) را انجام میدهد.
1$ python3 -m pip install instapy
ویژگیهای اساسی اینستاپای
اکنون، میتوان کد بالا را با استفاده از InstaPy بازنویسی کرد تا بتوان دو گزینه ممکن را با هم مقایسه کرد. ابتدا باید فایل پایتون دیگری ساخته و قطعه کد زیر در آن وارد شود.
1from instapy import InstaPy
2
3InstaPy(username="<your_username>", password="<your_password>").login()
در کد بالا، تنها نیاز به جایگذاری نام کاربری و رمز عبور است و پس از آن، همین دو خط کد کاری را انجام میدهد که کدهای قبلی انجام میدادند. با وجود آنکه نتایج این دو قطعه کد مشابه با یکدیگر است، ساز و کار به وقوع پیوسته در آنها شبیه به هم نیست. علاوه بر وارد شدن به پروفایل، اینستاپای کارهای دیگری مانند بررسی اتصال اینترنت و بررسی وضعیت سرورهای اینستاگرام را انجام میدهد. این مورد به طور مستقیم در مرورگر یا در سوابق (Log) قابل مشاهده است.
1INFO [2019-12-17 22:03:19] [username] -- Connection Checklist [1/3] (Internet Connection Status)
2INFO [2019-12-17 22:03:20] [username] - Internet Connection Status: ok
3INFO [2019-12-17 22:03:20] [username] - Current IP is "17.283.46.379" and it's from "Germany/DE"
4INFO [2019-12-17 22:03:20] [username] -- Connection Checklist [2/3] (Instagram Server Status)
5INFO [2019-12-17 22:03:26] [username] - Instagram WebSite Status: Currently Up
اکنون زمان آن رسیده است که اسکریپت نوشته شده برای ربات، کارهایی جالبتر از وارد شدن به حساب کاربری فرد را انجام دهد. بدین منظور، فرض میشود که حساب کاربری که ربات برای آن ساخته شده، پیرامون خودروها است و بنابراین، ربات تمایل به دنبال کردن و تعامل با کاربرانی دارد که به خودروها علاقهمند هستند. در این راستا و برای شروع، ربات میتواند با لایک کردن پستهایی که دارای تگ bmw# یا mercedes# هستند شروع کند. بدین منظور، از متد like_by_tags() استفاده میشود.
1from instapy import InstaPy
2
3session = InstaPy(username="<your_username>", password="<your_password>")
4session.login()
5session.like_by_tags(["bmw", "mercedes"], amount=5)
در اینجا، به متد یک لیست از تگها و تعداد تصاویری که برای هر تگ باید لایک کنند، داده میشود. در این مثال، ربات به گونهای تنظیم شده است که برای هر یک از دو تگ داده شده، پنج پست لایک کند و این یعنی، ربات کلا ۱۰ پست را لایک میکند. پس از اجرای کد، آنچه در زیر مشاهده میکنید به وقوع خواهد پیوست.
1INFO [2019-12-17 22:15:58] [username] Tag [1/2]
2INFO [2019-12-17 22:15:58] [username] --> b'bmw'
3INFO [2019-12-17 22:16:07] [username] desired amount: 14 | top posts [disabled]: 9 | possible posts: 43726739
4INFO [2019-12-17 22:16:13] [username] Like# [1/14]
5INFO [2019-12-17 22:16:13] [username] https://www.instagram.com/p/B6MCcGcC3tU/
6INFO [2019-12-17 22:16:15] [username] Image from: b'mattyproduction'
7INFO [2019-12-17 22:16:15] [username] Link: b'https://www.instagram.com/p/B6MCcGcC3tU/'
8INFO [2019-12-17 22:16:15] [username] Description: b'Mal etwas anderes \xf0\x9f\x91\x80\xe2\x98\xba\xef\xb8\x8f Bald ist das komplette Video auf YouTube zu finden (n\xc3\xa4here Infos werden folgen). Vielen Dank an @patrick_jwki @thehuthlife und @christic_ f\xc3\xbcr das bereitstellen der Autos \xf0\x9f\x94\xa5\xf0\x9f\x98\x8d#carporn#cars#tuning#bagged#bmw#m2#m2competition#focusrs#ford#mk3#e92#m3#panasonic#cinematic#gh5s#dji#roninm#adobe#videography#music#bimmer#fordperformance#night#shooting#'
9INFO [2019-12-17 22:16:15] [username] Location: b'K\xc3\xb6ln, Germany'
10INFO [2019-12-17 22:16:51] [username] --> Image Liked!
11INFO [2019-12-17 22:16:56] [username] --> Not commented
12INFO [2019-12-17 22:16:57] [username] --> Not following
13INFO [2019-12-17 22:16:58] [username] Like# [2/14]
14INFO [2019-12-17 22:16:58] [username] https://www.instagram.com/p/B6MDK1wJ-Kb/
15INFO [2019-12-17 22:17:01] [username] Image from: b'davs0'
16INFO [2019-12-17 22:17:01] [username] Link: b'https://www.instagram.com/p/B6MDK1wJ-Kb/'
17INFO [2019-12-17 22:17:01] [username] Description: b'Someone said cloud? \xf0\x9f\xa4\x94\xf0\x9f\xa4\xad\xf0\x9f\x98\x88 \xe2\x80\xa2\n\xe2\x80\xa2\n\xe2\x80\xa2\n\xe2\x80\xa2\n#bmw #bmwrepost #bmwm4 #bmwm4gts #f82 #bmwmrepost #bmwmsport #bmwmperformance #bmwmpower #bmwm4cs #austinyellow #davs0 #mpower_official #bmw_world_ua #bimmerworld #bmwfans #bmwfamily #bimmers #bmwpost #ultimatedrivingmachine #bmwgang #m3f80 #m5f90 #m4f82 #bmwmafia #bmwcrew #bmwlifestyle'
18INFO [2019-12-17 22:17:34] [username] --> Image Liked!
19INFO [2019-12-17 22:17:37] [username] --> Not commented
20INFO [2019-12-17 22:17:38] [username] --> Not following
به طور پیشفرض، InstaPy نُه پست اول را به انضمام تعدادی که در amount توسط کاربر برای آن مشخص شده است (در اینجا ۵ برای هر تگ) لایک میکند. بنابراین، برای هر تگ به طور کلی ۱۴ پست (۵ + ۹) لایک میشود. همچنین، InstaPy هر فعالیتی که انجام میدهد را در سوابق (Log) ثبت میکند. همانطور که در بالا مشهود است، اینستاپای مشخص میکند که ربات کدام پست (Post)، با چه لینکی (Link)، با چه توضیحاتی (Description) و در کدام موقعیت جغرافیایی (Location) را لایک کرده است. همچنین، اینکه ربات روی پست کامنت گذاشته و یا صاحب حساب کاربری را فالو کرده است را نیز ثبت میکند. اکنون، باید ربات را به گونهای تنظیم کرد که محتوای نامناسب را لایک نکند. برای اجتناب از وقوع این موضوع، میتوان یک لیست از تگهایی که ربات نباید پستهای دارای آنها را لایک کند، در اختیار ربات قرار داد.
1from instapy import InstaPy
2
3session = InstaPy(username="<your_username>", password="<your_password>")
4session.login()
5session.like_by_tags(["bmw", "mercedes"], amount=5)
6session.set_dont_like(["naked", "nsfw"])
با اعمال این تغییرات روی ربات، دیگر پستهایی که در توضیحات خود دارای تگهای nsfw یا naked هستند، توسط ربات لایک نمیشوند. میتوان هر تگ دیگری را نیز به این لیست اضافه کرد. اکنون، میتوان به ربات گفت که نه تنها پستها را لایک کند، بلکه برخی از منتشر کنندگان آن پستها را نیز دنبال کند. این کار با استفاده از متد set_do_follow() قابل انجام است.
1from instapy import InstaPy
2
3session = InstaPy(username="<your_username>", password="<your_password>")
4session.login()
5session.like_by_tags(["bmw", "mercedes"], amount=5)
6session.set_dont_like(["naked", "nsfw"])
7session.set_do_follow(True, percentage=50)
در صورت اجرای اسکریپت، ربات پنجاه درصد از کاربرانی را که پستهای آنها را لایک کرده است، دنبال میکند. همانطور که پیشتر نیز بیان شد، سوابق کلیه فعالیتهای ربات، ثبت (Log) میشود. همچنین، میتوان ربات را به گونهای تنظیم کرد که برای پستها نظر نیز درج کند. در این راستا، باید دو کار انجام داد. اول آنکه باید قابلیت نظر گذاشتن را با استفاده از set_do_comment() فعال کرد.
1from instapy import InstaPy
2
3session = InstaPy(username="<your_username>", password="<your_password>")
4session.login()
5session.like_by_tags(["bmw", "mercedes"], amount=5)
6session.set_dont_like(["naked", "nsfw"])
7session.set_do_follow(True, percentage=50)
8session.set_do_comment(True, percentage=50)
در گام دوم، باید به ربات گفت که چه نظراتی را درج کند. این کار با استفاده از متد set_comments() انجام میشود.
1from instapy import InstaPy
2
3session = InstaPy(username="<your_username>", password="<your_password>")
4session.login()
5session.like_by_tags(["bmw", "mercedes"], amount=5)
6session.set_dont_like(["naked", "nsfw"])
7session.set_do_follow(True, percentage=50)
8session.set_do_comment(True, percentage=50)
9session.set_comments(["Nice!", "Sweet!", "Beautiful :heart_eyes:"])
با اجرای اسکریپت، ربات یکی از سه نظری که به آن داده شده است را روی نیمی از پستهایی که با آنها تعامل دارد درج میکنند. اکنون که تنظیمات اولیه انجام شد، میتوان جلسه (Session) را با استفاده از end() پایان داد.
1from instapy import InstaPy
2
3session = InstaPy(username="<your_username>", password="<your_password>")
4session.login()
5session.like_by_tags(["bmw", "mercedes"], amount=5)
6session.set_dont_like(["naked", "nsfw"])
7session.set_do_follow(True, percentage=50)
8session.set_do_comment(True, percentage=50)
9session.set_comments(["Nice!", "Sweet!", "Beautiful :heart_eyes:"])
10session.end()
این قطعه کد، موجب میشود که مرورگر بسته، سوابق (Logs) ذخیره و یک گزارش آماده شود که میتوان آن را در خروجی کنسول دید.
سایر ویژگیهای InstaPy
InstaPy یک پروژه قابل توجه است که ویژگیهای زیاد و جالبی دارد. این ویژگیها را میتوان در مستندات پایتون مشاهده کرد. سایر ویژگیهای پایتون و چگونگی کار با آنها نیز مشابه آنچه بیان شد قابل استفاده هستند.
یک نکته مهم در آموزش ساخت ربات اینستاگرام با پایتون
نکته بسیار مهمی که باید به آن توجه داشت این است که نمیتوان همه روزه و در کل شبانهروز در اینستاگرام بود و در صورتی که ربات بدین شکل فعال باشد، اینستاگرام به سرعت این موضوع را میفهمد و برخی از فعالیتهای آن را مسدود میکند. به همین دلیل است که باید برخی از فعالیتهای ربات را دارای تاخیر و اصطلاحا سهمیهبندی کرد. در این راستا، باید گامهای زیر را برداشت.
1session.set_quota_supervisor(enabled=True, peak_comments_daily=240, peak_comments_hourly=21)
با انجام تنظیمات بالا، ربات تا هنگامی به درج نظر میپردازد که به محدودیت ساعتی و روزانه خود برسد. پس از بازه تاخیر، فعالیت ربات مجددا از سر گرفته میشود.
مرورگر وب بدون واسط گرافیکی کاربر
ویژگی «مرورگر وب بدون واسط گرافیکی کاربر» (Headless Browser) به کاربر امکان میدهد تا ربات را بدون رابط برنامهنویسی گرافیکی اجرا کند. این ویژگی در صورتی که کاربر بخواهد ربات خود را روی یک سرور مستقر کند، که احتمالا نیازی به رابط گرافیکی ندارد، مفید خواهد بود. همچنین، این روش از پردازنده کمتر استفاده میکند و بنابراین، کارایی را بهبود میبخشد. از این ویژگی میتوان با استفاده از دستور زیر استفاده کرد.
1session = InstaPy(username='test', password='test', headless_browser=True)
نکته قابل توجه آن است که این پرچم (Flag) را باید هنگام مقداردهی اولیه شی InstaPy تنظیم کرد.
استفاده از هوش مصنوعی برای تحلیل پستها
پیش از این چگونگی نادیده انگاشتن پستهایی که حاوی محتوای نامناسب هستند، توضیح داده شد. اما اگر توضیحات همراه با تصویر حاوی کلمات نامناسب نباشند، اما خود تصویر دارای محتوای نامناسب باشد، چه اقدامی باید انجام داد؟ برای غلبه بر این چالش، میتوان ربات InstaPy را با ClarifAI یکپارچه کرد. ClarifAI قابلیت «بازشناسی تصویر» (Image Recognition) و «بازشناسی ویدئو» (ٰVideo Recognition) را ارائه میکند.
1session.set_use_clarifai(enabled=True, api_key='<your_api_key>')
2session.clarifai_check_img_for(['nsfw'])
با استفاده از دستور بالا، ربات دیگر تصاویری که حاوی محتوای نامناسب برای محیط کار (Not Safe For Work | NSFW) هستند را نمایش نمیدهد. امکان پنج هزار فراخوانی رایگان ClarifAI در هر ماه توسط کاربر وجود دارد.
مرزهای روابط
در بسیاری از مواقع، صرف زمان برای تعامل با افرادی که تعداد دنبالکنندگان زیادی دارند، کار بیحاصلی است؛ زیرا چنین افرادی معمولا چهرههای شناخته شدهای هستند که دیگران را به سختی دنبال میکنند. در چنین شرایطی، استفاده از حد و مرز برای برقراری رابطه، میتواند نتیجه را بهینهتر کند و مانع اتلاف زمان و منابع محاسباتی نشود. با استفاده از دستور زیر میتواند این کار را انجام داد.
1session.set_relationship_bounds(enabled=True, max_followers=8500)
با استفاده از دستور بالا، ربات دیگر با پستهای کاربرانی که بیش از ۸۵۰۰ دنبال کننده دارند، تعامل نمیکند.
سلام
چطور میشه با کدنویسی ، آی دی و تعداد فالورهای پیجهای یک گروه خاص مثلا آشپزی را در اینستاگرام پیدا و لیست کرد .
ربات من داشت خوب کار میکرد ولی بعد دو ساعت اینستا زد اکانتمو مسدودش کرد اصلا آیپیمو هم مسدود کرده کلا ،الان چه غلطی کنم
سلام وقت بخیر .
من میخوام یه ربات بنویسم که بیاد مثلا یک یا چند پیج رو همیشه برسی کنه که اگه یه موقع اون پیج پروفایلشو عوض گرد سریع بیاد و پروفایل جدیدو دان کنه .
ولی نمیدونم چجوری باید به ربات بفهمونم که پرفایل عوض شده و پروفایل جدید اومده .
استاد راهنمایی کنید لطفا .
سلام باید تنظیم که روزی چند بار اکانت چک کنه
سلام،من ربات رو نوشتم،وارد میشه پست رو پیدا میکنه ولی لایک نمیکنه و keyError=0 میده
سلام. من با selenium یک ربات اینستاگرام نوشتم و به وسیله ی ربات وارد حساب کاربری خود در اینستاگرام شدم ولی به محض وارد شدن حساب کاربری مسدود شد. باید چیکار کرد تا وقتی با ربات وارد اینستا می شوی حسابت محدود نشه؟
browser = webdriver.Firefox()
این خط خطا میده
‘geckodriver’ executable needs to be in PATH.
باید درایور فایرفاکس و نصب کنی، بعد تو محیط ویندوز شناساییش کنی
با سلام
باید بروسر درایور رو در کنار فایل کد قرار بدید