python_developer
الذهاب إلى القناة على Telegram
کانال اموزش پایتون @Real_developer تبلیغات پذیرفته میشود.
إظهار المزيد1 519
المشتركون
لا توجد بيانات24 ساعات
-37 أيام
-430 أيام
أرشيف المشاركات
1 519
با استفاده از دستور بالا، ربات دیگر با پستهای کاربرانی که بیش از ۸۵۰۰ دنبال کننده دارند، تعامل نمیکند
1 519
مرزهای روابط
در بسیاری از مواقع، صرف زمان برای تعامل با افرادی که تعداد دنبالکنندگان زیادی دارند، کار بیحاصلی است؛ زیرا چنین افرادی معمولا چهرههای شناخته شدهای هستند که دیگران را به سختی دنبال میکنند. در چنین شرایطی، استفاده از حد و مرز برای برقراری رابطه، میتواند نتیجه را بهینهتر کند و مانع اتلاف زمان و منابع محاسباتی نشود. با استفاده از دستور زیر میتواند این کار را انجام داد.
1 519
با استفاده از دستور بالا، ربات دیگر تصاویری که حاوی محتوای نامناسب برای محیط کار (Not Safe For Work | NSFW) هستند را نمایش نمیدهد. امکان پنج هزار فراخوانی رایگان ClarifAI در هر ماه توسط کاربر وجود دارد
1 519
session.set_use_clarifai(enabled=True, api_key='') session.clarifai_check_img_for(['nsfw'])
1 519
استفاده از هوش مصنوعی برای تحلیل پستها
پیش از این چگونگی نادیده انگاشتن پستهایی که حاوی محتوای نامناسب هستند، توضیح داده شد. اما اگر توضیحات همراه با تصویر حاوی کلمات نامناسب نباشند، اما خود تصویر دارای محتوای نامناسب باشد، چه اقدامی باید انجام داد؟ برای غلبه بر این چالش، میتوان ربات InstaPy را با ClarifAI یکپارچه کرد. ClarifAI قابلیت «بازشناسی تصویر» (Image Recognition) و «بازشناسی ویدئو» (ٰVideo Recognition) را ارائه میکند.
1 519
نکته قابل توجه آن است که این پرچم (Flag) را باید هنگام مقداردهی اولیه شی InstaPy تنظیم کرد.
1 519
مرورگر وب بدون واسط گرافیکی کاربر
ویژگی «مرورگر وب بدون واسط گرافیکی کاربر» (Headless Browser) به کاربر امکان میدهد تا ربات را بدون رابط برنامهنویسی گرافیکی اجرا کند. این ویژگی در صورتی که کاربر بخواهد ربات خود را روی یک سرور مستقر کند، که احتمالا نیازی به رابط گرافیکی ندارد، مفید خواهد بود. همچنین، این روش از پردازنده کمتر استفاده میکند و بنابراین، کارایی را بهبود میبخشد. از این ویژگی میتوان با استفاده از دستور زیر استفاده کرد.
1 519
با انجام تنظیمات بالا، ربات تا هنگامی به درج نظر میپردازد که به محدودیت ساعتی و روزانه خود برسد. پس از بازه تاخیر، فعالیت ربات مجددا از سر گرفته میشود
1 519
session.set_quota_supervisor(enabled=True, peak_comments_daily=240, peak_comments_hourly=21)
1 519
یک نکته مهم در آموزش ساخت ربات اینستاگرام با پایتون
نکته بسیار مهمی که باید به آن توجه داشت این است که نمیتوان همه روزه و در کل شبانهروز در اینستاگرام بود و در صورتی که ربات بدین شکل فعال باشد، اینستاگرام به سرعت این موضوع را میفهمد و برخی از فعالیتهای آن را مسدود میکند. به همین دلیل است که باید برخی از فعالیتهای ربات را دارای تاخیر و اصطلاحا سهمیهبندی کرد. در این راستا، باید گامهای زیر را برداشت.
1 519
سرویس «بهلینک» را میتوان نوعی کارت ویزیت آنلاین به شمار آورد که تمامی این موارد را پوشش میدهد و فقط با استفاده از یک لینک اختصاصی، به تمامی این امکانات دست پیدا میکنید.
علاوه بر موارد گفته شده، ثبت سوالات متداول کسب و کار یا ارائه توضیحات مختلف در رابطه با تاریخچه فعالیتهای شما در بهلینک فراهم است. با توجه به محدود بودن تعداد کاراکترهای بیو اینستاگرام، ثبت آدرس دقیق نیز امکانپذیر نیست که این مشکل هم با ساخت بهلینک، برطرف میشود.
برای ایجاد بهلینک + اینجا کلیک کنید.
یک نکته مهم در آموزش ساخت ربات اینستاگرام با پایتون
نکته بسیار مهمی که باید به آن توجه داشت این است که نمیتوان همه روزه و در کل شبانهروز در اینستاگرام بود و در صورتی که ربات بدین شکل فعال باشد، اینستاگرام به سرعت این موضوع را میفهمد و برخی از فعالیتهای آن را مسدود میکند. به همین دلیل است که باید برخی از فعالیتهای ربات را دارای تاخیر و اصطلاحا سهمیهبندی کرد. در این راستا، باید گامهای زیر را برداشت.
https://www.instagram.com/p/B6MDK1wJ-Kb
1 519
به طور پیشفرض، InstaPy نُه پست اول را به انضمام تعدادی که در amount توسط کاربر برای آن مشخص شده است (در اینجا ۵ برای هر تگ) لایک میکند. بنابراین، برای هر تگ به طور کلی ۱۴ پست (۵ + ۹) لایک میشود. همچنین، InstaPy هر فعالیتی که انجام میدهد را در سوابق (Log) ثبت میکند. همانطور که در بالا مشهود است، اینستاپای مشخص میکند که ربات کدام پست (Post)، با چه لینکی (Link)، با چه توضیحاتی (Description) و در کدام موقعیت جغرافیایی (Location) را لایک کرده است. همچنین، اینکه ربات روی پست کامنت گذاشته و یا صاحب حساب کاربری را فالو کرده است را نیز ثبت میکند. اکنون، باید ربات را به گونهای تنظیم کرد که محتوای نامناسب را لایک نکند. برای اجتناب از وقوع این موضوع، میتوان یک لیست از تگهایی که ربات نباید پستهای دارای آنها را لایک کند، در اختیار ربات قرار داد.
from instapy import InstaPy session = InstaPy(username="", password="") session.login() session.like_by_tags(["bmw", "mercedes"], amount=5) session.set_dont_like(["naked", "nsfw"])
کپی
با اعمال این تغییرات روی ربات، دیگر پستهایی که در توضیحات خود دارای تگهای nsfw یا naked هستند، توسط ربات لایک نمیشوند. میتوان هر تگ دیگری را نیز به این لیست اضافه کرد. اکنون، میتوان به ربات گفت که نه تنها پستها را لایک کند، بلکه برخی از منتشر کنندگان آن پستها را نیز دنبال کند. این کار با استفاده از متد set_do_follow() قابل انجام است.
from instapy import InstaPy session = InstaPy(username="", password="") session.login() session.like_by_tags(["bmw", "mercedes"], amount=5) session.set_dont_like(["naked", "nsfw"]) session.set_do_follow(True, percentage=50)
کپی
در صورت اجرای اسکریپت، ربات پنجاه درصد از کاربرانی را که پستهای آنها را لایک کرده است، دنبال میکند. همانطور که پیشتر نیز بیان شد، سوابق کلیه فعالیتهای ربات، ثبت (Log) میشود. همچنین، میتوان ربات را به گونهای تنظیم کرد که برای پستها نظر نیز درج کند. در این راستا، باید دو کار انجام داد. اول آنکه باید قابلیت نظر گذاشتن را با استفاده از set_do_comment() فعال کرد.
from instapy import InstaPy session = InstaPy(username="", password="") session.login() session.like_by_tags(["bmw", "mercedes"], amount=5) session.set_dont_like(["naked", "nsfw"]) session.set_do_follow(True, percentage=50) session.set_do_comment(True, percentage=50)
کپی
در گام دوم، باید به ربات گفت که چه نظراتی را درج کند. این کار با استفاده از متد set_comments() انجام میشود.
from instapy import InstaPy session = InstaPy(username="", password="") session.login() session.like_by_tags(["bmw", "mercedes"], amount=5) session.set_dont_like(["naked", "nsfw"]) session.set_do_follow(True, percentage=50) session.set_do_comment(True, percentage=50) session.set_comments(["Nice!", "Sweet!", "Beautiful :heart_eyes:"])
کپی
با اجرای اسکریپت، ربات یکی از سه نظری که به آن داده شده است را روی نیمی از پستهایی که با آنها تعامل دارد درج میکنند. اکنون که تنظیمات اولیه انجام شد، میتوان جلسه (Session) را با استفاده از end() پایان داد.
from instapy import InstaPy session = InstaPy(username="", password="") session.login() session.like_by_tags(["bmw", "mercedes"], amount=5) session.set_dont_like(["naked", "nsfw"]) session.set_do_follow(True, percentage=50) session.set_do_comment(True, percentage=50) session.set_comments(["Nice!", "Sweet!", "Beautiful :heart_eyes:"]) session.end()
کپی
این قطعه کد، موجب میشود که مرورگر بسته، سوابق (Logs) ذخیره و یک گزارش آماده شود که میتوان آن را در خروجی کنسول دید.
سایر ویژگیهای InstaPy
InstaPy یک پروژه قابل توجه است که ویژگیهای زیاد و جالبی دارد. این ویژگیها را میتوان در مستندات پایتون مشاهده کرد. سایر ویژگیهای پایتون و چگونگی کار با آنها نیز مشابه آنچه بیان شد قابل استفاده هستند.
معرفی بهلینک برای کارایی و اثرگذاری لینک پروفایل اینستاگرام

همانطور که میدانید، در پروفایل اینستاگرام فقط امکان درج یک لینک وجود دارد. حال اگر بخواهید لینکهای مختلفی همچون لینک سایت، ایمیل، شمارههای تماس یا سایر لینکهای مفید مانند لینک کمپینهای تبلیغاتی یا آخرین پستهای وبلاگ خود را قرار دهید، چنین امکانی وجود نخواهد داشت.
1 519
from instapy import InstaPy InstaPy(username="<your_username>", password="<your_password>").login()
کپی
در کد بالا، تنها نیاز به جایگذاری نام کاربری و رمز عبور است و پس از آن، همین دو خط کد کاری را انجام میدهد که کدهای قبلی انجام میدادند. با وجود آنکه نتایج این دو قطعه کد مشابه با یکدیگر است، ساز و کار به وقوع پیوسته در آنها شبیه به هم نیست. علاوه بر وارد شدن به پروفایل، اینستاپای کارهای دیگری مانند بررسی اتصال اینترنت و بررسی وضعیت سرورهای اینستاگرام را انجام میدهد. این مورد به طور مستقیم در مرورگر یا در سوابق (Log) قابل مشاهده است.
INFO [2019-12-17 22:03:19] [username] -- Connection Checklist [1/3] (Internet Connection Status) INFO [2019-12-17 22:03:20] [username] - Internet Connection Status: ok INFO [2019-12-17 22:03:20] [username] - Current IP is "17.283.46.379" and it's from "Germany/DE" INFO [2019-12-17 22:03:20] [username] -- Connection Checklist [2/3] (Instagram Server Status) INFO [2019-12-17 22:03:26] [username] - Instagram WebSite Status: Currently Up
کپی
اکنون زمان آن رسیده است که اسکریپت نوشته شده برای ربات، کارهایی جالبتر از وارد شدن به حساب کاربری فرد را انجام دهد. بدین منظور، فرض میشود که حساب کاربری که ربات برای آن ساخته شده، پیرامون خودروها است و بنابراین، ربات تمایل به دنبال کردن و تعامل با کاربرانی دارد که به خودروها علاقهمند هستند. در این راستا و برای شروع، ربات میتواند با لایک کردن پستهایی که دارای تگ bmw# یا mercedes# هستند شروع کند. بدین منظور، از متد like_by_tags() استفاده میشود.
from instapy import InstaPy session = InstaPy(username="<your_username>", password="<your_password>") session.login() session.like_by_tags(["bmw", "mercedes"], amount=5)
کپی
در اینجا، به متد یک لیست از تگها و تعداد تصاویری که برای هر تگ باید لایک کنند، داده میشود. در این مثال، ربات به گونهای تنظیم شده است که برای هر یک از دو تگ داده شده، پنج پست لایک کند و این یعنی، ربات کلا ۱۰ پست را لایک میکند. پس از اجرای کد، آنچه در زیر مشاهده میکنید به وقوع خواهد پیوست.
INFO [2019-12-17 22:15:58] [username] Tag [1/2] INFO [2019-12-17 22:15:58] [username] --> b'bmw' INFO [2019-12-17 22:16:07] [username] desired amount: 14 | top posts [disabled]: 9 | possible posts: 43726739 INFO [2019-12-17 22:16:13] [username] Like# [1/14] INFO [2019-12-17 22:16:13] [username] https://www.instagram.com/p/B6MCcGcC3tU/ INFO [2019-12-17 22:16:15] [username] Image from: b'mattyproduction' INFO [2019-12-17 22:16:15] [username] Link: b'https://www.instagram.com/p/B6MCcGcC3tU/' INFO [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#' INFO [2019-12-17 22:16:15] [username] Location: b'K\xc3\xb6ln, Germany' INFO [2019-12-17 22:16:51] [username] --> Image Liked! INFO [2019-12-17 22:16:56] [username] --> Not commented INFO [2019-12-17 22:16:57] [username] --> Not following INFO [2019-12-17 22:16:58] [username] Like# [2/14] INFO [2019-12-17 22:16:58] [username] https://www.instagram.com/p/B6MDK1wJ-Kb/ INFO [2019-12-17 22:17:01] [username] Image from: b'davs0' INFO [2019-12-17 22:17:01] [username] Link: b'https://www.instagram.com/p/B6MDK1wJ-Kb/' INFO [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' INFO [2019-12-17 22:17:34] [username] --> Image Liked! INFO [2019-12-17 22:17:37] [username] --> Not commented INFO [2019-12-17 22:17:38] [username] --> Not following
کپی
1 519
قرار دادن کدهای تکراری در پروژهها در حالت کلی اتفاقی بد و منفی است و در پروژه مطلب آموزش ساخت ربات اینستاگرام با پایتون به طور ویژهای بدتر محسوب میشود. زیرا کد سلنیوم به عناصر «رابط کاربری» (User Interface) وابسته است و عناصر رابط کاربری معمولا زیاد تغییر داده میشوند. هنگامی که عناصر رابط کاربری تغییر میکنند و نیاز به تغییر و به روز رسانی کد ایجاد میشود، بحث Page Object Pattern مطرح میشود. با این الگو (Pattern)، کلاسهای شی صفحه (Page Object Classes) برای مهمترین صفحات یا قسمتها (Fragments) ساخته میشوند و در واقع رابطهایی را شکل میدهند که برای برنامه قابل درک است. با در نظر داشتن این موضوع، میتوان کد بالا را بازنویسی کرد و کلاسهای HomePage و LoginPage را ساخت.
from time import sleep class LoginPage: def init(self, browser): self.browser = browser def login(self, username, password): username_input = self.browser.find_element_by_css_selector("input[name='username']") password_input = self.browser.find_element_by_css_selector("input[name='password']") username_input.send_keys(username) password_input.send_keys(password) login_button = browser.find_element_by_xpath("//button[@type='submit']") login_button.click() sleep(5) class HomePage: def init(self, browser): self.browser = browser self.browser.get('https://www.instagram.com/') def go_to_login_page(self): self.browser.find_element_by_xpath("//a[text()='Log in']").click() sleep(2) 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 نمایش داده شده است.
from selenium import webdriver browser = webdriver.Firefox() browser.implicitly_wait(5) home_page = HomePage(browser) login_page = home_page.go_to_login_page() login_page.login("<your username>", "<your password>") browser.close()
کپی
اکنون کد بهبود یافته است و تست بالا را میتوان به صورت زیر بازنویسی کرد.
def test_login_page(browser): home_page = HomePage(browser) login_page = home_page.go_to_login_page() login_page.login("<your username>", "<your password>") errors = browser.find_elements_by_css_selector('#error_message') assert len(errors) == 0
کپی
با تغییرات انجام شده در کدها، حتی در صورتی که تغییراتی در رابطه کاربری برنامه اتفاق بیفتد، دیگر نیازی به تغییر کدهای تست نیست. اکنون که مفهوم و چگونگی کار با سلنیوم (Selenium) و Page Object Pattern تشریح و شفاف شد، میتوان به آموزش ساخت ربات اینستاگرام با پایتون پرداخت. اما پیش از ارائه آموزش ساخت ربات اینستاگرام با پایتون ابزار اینستاپای (Instapy) به طور اجمالی مورد بررسی قرار خواهد گرفت.
آشنایی با InstaPy
«اینستاپای» (InstaPy) بزرگترین و محبوبترین ابزار خودکارسازی موجود برای اینستاگرام به شمار میآید که به به صورت رایگان در دسترس است. طیف وسیعی از ویژگیها وجود دارد که منجر شدهاند اینستا به ابزاری درجه یک برای افزایش تعداد دنبال کنندگان در اینستاگرام مبدل شود. در بخش بعدی، آموزش ساخت ربات اینستاگرام با پایتون و اینستاپای ارائه میشود.
آموزش ساخت ربات اینستاگرام با پایتون و InstaPy
در این بخش، آموزش ساخت ربات اینستاگرام با پایتون و ابزار اینستاپای ارائه شده است. این ربات میتواند به صورت خودکار لایک بزند، افراد را دنبال و برای پستهای مختلف نظر درج کند. در این راستا، ابتدا باید اینستاپای را نصب کرد. دستور زیر کار نصب اینستاپای (InstaPy) را انجام میدهد.
$ python3 -m pip install instapy
کپی

ویژگیهای اساسی اینستاپای
اکنون، میتوان کد بالا را با استفاده از InstaPy بازنویسی کرد تا بتوان دو گزینه ممکن را با هم مقایسه کرد. ابتدا باید فایل پایتون دیگری ساخته و قطعه کد زیر در آن وارد شود.
1 519
خط ۹: عنصر <a> را که متن آن معادل ورود یا همان Log in است پیدا میکند. در اینجا، این کار با استفاده از XPath انجام میشود؛ اما متدهای دیگری نیز وجود دارند که با استفاده از آنها نیز میتوان این کار را انجام داد.
خط ۱۰: روی عنصر <a> برای صفحه ورود (login) کلیک میکند.
با اجرای اسکریپت بالا، میتوان خروجی آن را مشاهده کرد. این اسکریپت، مرورگر را باز میکند، به اینستاگرام میرود، روی دکمه ورود (Login) کلیک میکند و به صفحه ورود به اینستاگرام میرود. در صفحه ورود، سه عنصر مهم وجود دارد که عبارتند از:
بخش ورود نام کاربری
بخش ورود رمز عبور
دکمه ورود
اکنون باید اسکریپت را به گونهای تغییر داد که این عناصر را پیدا کند، اطلاعات هویتی صاحب صفحه کاربری شامل نام کاربری و گذرواژه را وارد و روی دکمه ورود (Login) کلیک کند.
from time import sleep from selenium import webdriver browser = webdriver.Firefox() browser.implicitly_wait(5) browser.get('https://www.instagram.com/') login_link = browser.find_element_by_xpath("//a[text()='Log in']") login_link.click() sleep(2) username_input = browser.find_element_by_css_selector("input[name='username']") password_input = browser.find_element_by_css_selector("input[name='password']") username_input.send_keys("<your username>") password_input.send_keys("<your password>") login_button = browser.find_element_by_xpath("//button[@type='submit']") login_button.click() sleep(5) browser.close()
کپی
در ادامه، توضیحاتی پیرامون خطوط کد تغییر یافته و جدید ارائه شده است.
خط ۱۲: برای ۲ ثانیه به خواب میرود تا امکان بارگذاری صفحه فراهم شود.
خطوط ۱۴ و ۱۵: ورودیهای نامکاربری و رمز عبور را با استفاده از CSS پیدا میکند. کاربر میتواند از هر متد دیگری که ترجیح میدهد، برای انجام این کار استفاده کند.
خطوط ۱۷ و ۱۸: نام کاربری و رمز عبور را به ترتیب در محل ورود آنها وارد میکند.
خط ۲۰: کلمه «Login» را با XPath پیدا میکند.
خط ۲۱: روی دکمه ورود کلیک میکند.
با اجرای این اسکریپت، به صورت خودکار وارد حساب کاربری اینستاگرام فرد میشود. اکنون زمان شروع کار جدیتر با ربات اینستاگرام رسیده است. ادامه فرایند نوشتن این اسکریپت و تکمیل آن نیز، مشابه آنچه است که تا این لحظه انجام شده است. در واقع، ربات (اسکریپت) در ادامه پستها را پیمایش (Scroll)، مواردی که به آنها علاقه دارد (بر اساس معیارهایی که به آن داده شده است) را پس از پیدا کردن دکمه «Like» لایک و پس از پیدا کردن جعبه درج نظر، لایک یا برای آنها نظر درج میکند و به همین ترتیب ادامه میدهد. کلیه فعالیتهای ذکر شده را میتوان با استفاده از ابزار InstaPy انجام داد. اما پیش از استفاده از InstaPy باید با Page Object Pattern آشنا شد تا بهتر فهمید که InstaPy چگونه کار میکند. در بخش بعدی از مطلب آموزش ساخت ربات اینستاگرام با پایتون روش استفاده از Page Object Pattern بررسی میشود.
روش استفاده از Page Object Pattern
پرسشی که در این مرحله باید به آن پاسخ داد این است که اکنون که کد ورود (Login) نوشته شد، چطور میتوان یک تست برای آن نوشت؟ کد مربوط به این کار به صورت زیر است.
def test_login_page(browser): browser.get('https://www.instagram.com/accounts/login/') username_input = browser.find_element_by_css_selector("input[name='username']") password_input = browser.find_element_by_css_selector("input[name='password']") username_input.send_keys("<your username>") password_input.send_keys("<your password>") login_button = browser.find_element_by_xpath("//button[@type='submit']") login_button.click() errors = browser.find_elements_by_css_selector('#error_message') assert len(errors) == 0
کپی
کد نوشته شده در بالا، یک خطای مهم دارد و آن خطا، عدم تبعیت از اصول «خودت را تکرار نکن» (Don’t Repeat Yourself | DRY) است. بر اساس این اصل که در برنامهنویسی وجود دارد، برنامهنویس نباید یک یا چند خط کد را در مکانهای مختلف برنامه خود تکرار کند. در این راستا، برنامهنویسان معمولا از برنامهنویسی «تابعی» (Functional Programming) یا «شیگرا» (Object Oriented) استفاده میکنند. در قطعه کدهای ارائه شده تا این لحظه در مطلب آموزش ساخت ربات اینستاگرام با پایتون چند خط کد وجود دارد که هم در برنامه کاربردی و هم در کد تست تکرار شده است.
1 519
«سلنیوم» (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) را روی سیستم خود نصب داشته باشد. اکنون، باید یک فایل پایتون ساخته و کد زیر در آن نوشته شود.
from time import sleep from selenium import webdriver browser = webdriver.Firefox() browser.get('https://www.instagram.com/') sleep(5) browser.close()
کپی
با اجرای کد بالا، میتوان مشاهده کرد که مرورگر وب باز میشود و به صفحه ورود اینستاگرام میرود. در ادامه، توضیحات خط به خط پیرامون کد بالا ارائه شده است.
خط ۱ و ۲: sleep و webdriver وارد میشوند.
خط ۴: آمادهسازی اولیه درایور فایرفاکس انجام و روی browser تنظیم میشود.
خط ۶: آدرس اینستاگرام را در نوار آدرس مرورگر نوشته و ورود (Enter) را میزند (آدرس نوشته شده را اعمال میکند).
خط ۸: به مدت پنج ثانیه منتظر میماند، بنابراین، میتوان نتایج را مشاهده کرد. در غیر این صورت، مرورگر را به صورت آنی میبندد.
خط ۱۰: مرورگر را میبندد.
آنچه نوشته شد، همان Hello World معروف زبانهای برنامهنویسی، اما در دنیای سلنیوم و ویژه آن است. اکنون، میتوان قطعه کد مربوط به قسمتی که موجب میشود برنامه در حساب کاربری فرد وارد شود را نوشت و به کد اصلی اضافه کرد. اما ابتدا، باید بررسی کرد که عامل انسانی در حالت عادی چگونه وارد حساب کاربری خود میشود. الگوریتم ساده این کار در ادامه آمده است.
به آدرس وب اینستاگرام میرود.
روی لینک ورود (Login) کلیک میکند.
اطلاعات هویتی خود شامل نام کاربری و رمز عبور را وارد میکند.
روی دکمه ورود (Login) کلیک میکند.
اولین گام بیان شده در روش انسانی ورود به اینستاگرام، در قطعه کد نوشته شده در بالا نیز انجام میشود. اکنون میتوان کد بالا را به گونهای تغییر داد که روی لینک ورود (Login) در صفحه خانگی اینستاگرام (Instagram Home Page) کلیک کند.
from time import sleep from selenium import webdriver browser = webdriver.Firefox() browser.implicitly_wait(5) browser.get('https://www.instagram.com/') login_link = browser.find_element_by_xpath("//a[text()='Log in']") login_link.click() sleep(5) browser.close()
کپی
در ادامه، خطهای کد جدید توضیح داده میشوند.
خط ۵: پنج ثانیه زمان انتظار ایجاد میکند. اگر سلنیوم نتواند یک عنصر (Element) را پیدا کند، برای مدت پنج ثانیه در انتظار میماند تا امکان بارگذاری همه چیز فراهم شود و مجددا تلاش کند.
1 519
همانطور که از توضیحات ارائه شده پیرامون شرکتهای گوناگون فعال در حوزه شبکههای اجتماعی مشخص است، یکی از گزینههای جذابی که افراد برای مدیریت و رشد شبکههای اجتماعی خود به آن نیاز دارند، ربات است. بنابراین، در ادامه این مطلب، آموزش ساخت ربات اینستاگرام با پایتون ارائه میشود. با بهرهگیری از این راهنما، مخاطبان با آموزش ساخت ربات اینستاگرام با پایتون و با استفاده از ابزار اینستاپای (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) انجام میشود.
چارچوب نرمافزاری سلنیوم
