با اجرای اسکریپت بالا، میتوان خروجی آن را مشاهده کرد. این اسکریپت، مرورگر را باز میکند، به اینستاگرام میرود، روی دکمه ورود (Login) کلیک میکند و به صفحه ورود به اینستاگرام میرود. در صفحه ورود، سه عنصر مهم وجود دارد که عبارتند از:
بخش ورود نام کاربری
بخش ورود رمز عبور
دکمه ورود
اکنون باید اسکریپت را به گونهای تغییر داد که این عناصر را پیدا کند، اطلاعات هویتی صاحب صفحه کاربری شامل نام کاربری و گذرواژه را وارد و روی دکمه ورود (Login) کلیک کند
بخش ورود نام کاربری
بخش ورود رمز عبور
دکمه ورود
اکنون باید اسکریپت را به گونهای تغییر داد که این عناصر را پیدا کند، اطلاعات هویتی صاحب صفحه کاربری شامل نام کاربری و گذرواژه را وارد و روی دکمه ورود (Login) کلیک کند
در ادامه، توضیحاتی پیرامون خطوط کد تغییر یافته و جدید ارائه شده است.
خط ۱۲: برای ۲ ثانیه به خواب میرود تا امکان بارگذاری صفحه فراهم شود.
خطوط ۱۴ و ۱۵: ورودیهای نامکاربری و رمز عبور را با استفاده از CSS پیدا میکند. کاربر میتواند از هر متد دیگری که ترجیح میدهد، برای انجام این کار استفاده کند.
خطوط ۱۷ و ۱۸: نام کاربری و رمز عبور را به ترتیب در محل ورود آنها وارد میکند.
خط ۲۰: کلمه «Login» را با XPath پیدا میکند.
خط ۲۱: روی دکمه ورود کلیک میکند.
خط ۱۲: برای ۲ ثانیه به خواب میرود تا امکان بارگذاری صفحه فراهم شود.
خطوط ۱۴ و ۱۵: ورودیهای نامکاربری و رمز عبور را با استفاده از CSS پیدا میکند. کاربر میتواند از هر متد دیگری که ترجیح میدهد، برای انجام این کار استفاده کند.
خطوط ۱۷ و ۱۸: نام کاربری و رمز عبور را به ترتیب در محل ورود آنها وارد میکند.
خط ۲۰: کلمه «Login» را با XPath پیدا میکند.
خط ۲۱: روی دکمه ورود کلیک میکند.
با اجرای این اسکریپت، به صورت خودکار وارد حساب کاربری اینستاگرام فرد میشود. اکنون زمان شروع کار جدیتر با ربات اینستاگرام رسیده است. ادامه فرایند نوشتن این اسکریپت و تکمیل آن نیز، مشابه آنچه است که تا این لحظه انجام شده است. در واقع، ربات (اسکریپت) در ادامه پستها را پیمایش (Scroll)، مواردی که به آنها علاقه دارد (بر اساس معیارهایی که به آن داده شده است) را پس از پیدا کردن دکمه «Like» لایک و پس از پیدا کردن جعبه درج نظر، لایک یا برای آنها نظر درج میکند و به همین ترتیب ادامه میدهد. کلیه فعالیتهای ذکر شده را میتوان با استفاده از ابزار InstaPy انجام داد. اما پیش از استفاده از InstaPy باید با Page Object Pattern آشنا شد تا بهتر فهمید که InstaPy چگونه کار میکند. در بخش بعدی از مطلب آموزش ساخت ربات اینستاگرام با پایتون روش استفاده از Page Object Pattern بررسی میشود.
This media is not supported in your browser
VIEW IN TELEGRAM
روش استفاده از Page Object Pattern
پرسشی که در این مرحله باید به آن پاسخ داد این است که اکنون که کد ورود (Login) نوشته شد، چطور میتوان یک تست برای آن نوشت؟ کد مربوط به این کار به صورت زیر است.
پرسشی که در این مرحله باید به آن پاسخ داد این است که اکنون که کد ورود (Login) نوشته شد، چطور میتوان یک تست برای آن نوشت؟ کد مربوط به این کار به صورت زیر است.
کد نوشته شده در بالا، یک خطای مهم دارد و آن خطا، عدم تبعیت از اصول «خودت را تکرار نکن» (Don’t Repeat Yourself | DRY) است. بر اساس این اصل که در برنامهنویسی وجود دارد، برنامهنویس نباید یک یا چند خط کد را در مکانهای مختلف برنامه خود تکرار کند. در این راستا، برنامهنویسان معمولا از برنامهنویسی «تابعی» (Functional Programming) یا «شیگرا» (Object Oriented) استفاده میکنند. در قطعه کدهای ارائه شده تا این لحظه در مطلب آموزش ساخت ربات اینستاگرام با پایتون چند خط کد وجود دارد که هم در برنامه کاربردی و هم در کد تست تکرار شده است.
قرار دادن کدهای تکراری در پروژهها در حالت کلی اتفاقی بد و منفی است و در پروژه مطلب آموزش ساخت ربات اینستاگرام با پایتون به طور ویژهای بدتر محسوب میشود. زیرا کد سلنیوم به عناصر «رابط کاربری» (User Interface) وابسته است و عناصر رابط کاربری معمولا زیاد تغییر داده میشوند. هنگامی که عناصر رابط کاربری تغییر میکنند و نیاز به تغییر و به روز رسانی کد ایجاد میشود، بحث Page Object Pattern مطرح میشود.
. با این الگو (Pattern)، کلاسهای شی صفحه (Page Object Classes) برای مهمترین صفحات یا قسمتها (Fragments) ساخته میشوند و در واقع رابطهایی را شکل میدهند که برای برنامه قابل درک است. با در نظر داشتن این موضوع، میتوان کد بالا را بازنویسی کرد و کلاسهای HomePage و LoginPage را ساخت.
این کد، عملکردی مشابه کد بالا دارد، با این تفاوت که Home Page و Login Page به صورت کلاسها نمایش داده شدهاند. کلاسها، مکانیزمهای لازم برای پیدا کردن دادهها در رابط کاربری و دستکاری آنها را کپسوله کردهاند. مورد دیگری که باید به آن توجه داشت، آن است که هنگام جا به جایی به صفحهای دیگر با استفاده از یک شی صفحه (Page Object)، این کد، Page Object برای صفحه جدید را باز میگرداند. «متدها» (Methods) و «اکسسورهایی» (Accessors) نیز وجود دارند که میتوانند هر آنچه یک انسان انجام میدهد را انجام دهند
باید به مقدار بازگردانده شده توسط go_to_log_in_page() توجه داشت. اگر کلاس دیگری به نام FeedPage وجود داشت، تابع login() از کلاس LoginPage نمونهای از آن را (return FeedPage()) باز میگرداند. در ادامه، چگونگی استفاده از Page Object Pattern نمایش داده شده است.
اکنون کد بهبود یافته است و تست بالا را میتوان به صورت زیر بازنویسی کرد.
با تغییرات انجام شده در کدها، حتی در صورتی که تغییراتی در رابطه کاربری برنامه اتفاق بیفتد، دیگر نیازی به تغییر کدهای تست نیست. اکنون که مفهوم و چگونگی کار با سلنیوم (Selenium) و Page Object Pattern تشریح و شفاف شد، میتوان به آموزش ساخت ربات اینستاگرام با پایتون پرداخت. اما پیش از ارائه آموزش ساخت ربات اینستاگرام با پایتون ابزار اینستاپای (Instapy) به طور اجمالی مورد بررسی قرار خواهد گرفت.
This media is not supported in your browser
VIEW IN TELEGRAM