آشنایی با Browser Automation

آتومیشن؟!Automation is the technology by which a process or procedure is performed with minimum human assistance.آتومیشن، فناوری انجام یک فرآیند با حداقل کمک از جانب انسان است. در گذشته، انسان‌ ابزاری برای انجام کار در دست داشت و امروز ابزار انسانی در دست دارد. ما فرآیند تولید یک وسیله را به ماشین‌هایی سپرده‌ایم که تحت کنترل انسان از مراحل ابتدایی تا نهایی کار را انجام می‌دهند. در این مقاله مرورگر را کنترل می‌کنیم تا فرآیندی که می‌خواهیم را به جای ما انجام دهد و این همان تعریف Browser Automation (خودکارسازی مرورگر) است.کاربردهای Browser Automationکشف لینک‌های شکسته (Broken Links): تصور کنید که در یک وب‌سایت ده‌هزار لینک وجود دارد و می‌خواهید لینک‌هایی که به خطای 404 می‌رسند را پیدا کنید. با استفاده از Browser Automation می‌توان این کار را به شکل خودکار انجام داد.استخراج داده‌ها از وب: می‌توانیم کدی بنویسیم که هر ساعت آخرین خبرهای یک وب‌سایت را استخراج و در جایی ذخیره کند. مثال‌های زیادی برای این کاربرد وجود دارد، می‌توانید در بخش کامنت‌های همین پست آنها را ذکر کنید!تست اتوماتیک: همیشه کدها را از داخل تست نمی‌کنیم و گاهی نیاز داریم که بررسی محصول را از دید کاربر نهایی انجام دهیم. با Browser Automation می‌توان تست‌های E2E را با مرورگرهای مختلف اجرا کرد و از درستی رفتار وب‌سایت مطمئن شد.ابزارهای لازمدر این مقاله از زبان PHP و پکیج php-webdriver استفاده می‌کنیم. این پکیج سه روش مختلف برای خودکارسازی مرورگر ارائه می‌کند که شاید ساده‌ترین آنها با Chrome Driver انجام شود و برای به‌کارگیری آن باید مرورگر Google Chrome و سپس کروم‌درایور سازگار با نسخه‌ی نصب‌شده را دانلود کنید. بعد از دانلود، در ترمینال درایور را اجرا کنید تا گوش به فرمان کدهای ما باشد:chromedriver --port=4444شروع بازیابتدا لازم است به سروری که Chrome Driver ایجاد کرده بود متصل شویم:use Facebook\WebDriver\Remote\RemoteWebDriver; use Facebook\WebDriver\Remote\DesiredCapabilities; $server = 'http://localhost:4444'; $driver = RemoteWebDriver::create($server, DesiredCapabilities::chrome());حالا با درایور چه کار کنیم؟ می‌خواستم با ویرگول بازی کنم ولی ترجیح دادم که ریسک نکنم، پس از ویکیپدیا استفاده می‌کنیم:$driver->get('https://en.wikipedia.org/wiki/Main_Page');متد get می‌تواند لینک درخواستی ما را در مرورگر باز کند. وقتی می‌گویم باز کند، یعنی واقعاً باز کند! بفرمایید:می‌توانیم موضوعی را در کادر جستجو بنویسیم تا صفحه‌ی مربوط به آن باز شود! امتحان کنیم:use Facebook\WebDriver\WebDriverBy; $driver->findElement(WebDriverBy::id('searchInput')) ->sendKeys('PHP') ->submit();یک متد static به نام id روی کلاس WebDriverBy وجود دارد که عنصری (Element) را در صفحه بر اساس مشخصه (یا همان Attribute) id انتخاب می‌کند. امکان انتخاب یک عنصر بر اساس tag یا class و غیره هم وجود دارد، ولی چون عنصر دیگری با این id در صفحه وجود ندارد، سرراست‌ترین روش همین است. بعد از انتخاب کادر جستجو، عبارت PHP را در آن نوشته‌ایم و سپس از متد submit استفاده کرده‌ایم تا فرم را برای actionاش ارسال کند. با اجرای این بخش از کد، به صفحه‌ی PHP در ویکیپدیا منتقل می‌شویم:می‌توانیم سومین تگ p که از جمله‌ی PHP is a general-purpose... شروع می‌شود را بدون شماره‌های داخل براکت چاپ کنیم:$paragraphs = $driver->findElements(WebDriverBy::cssSelector('.mw-parser-output p')); $text = $paragraphs[2]->getText(); echo preg_replace(&quot/\[[0-9]+\]/&quot, '', $text);PHP is a general-purpose scripting language especially suited to web development. It was originally created by Danish-Canadian programmer Rasmus Lerdorf in 1994. The PHP reference implementation is now produced by The PHP Group. PHP originally stood for Personal Home Page, but it now stands for the recursive initialism PHP: Hypertext Preprocessor.همچنین امکان گرفتن Screenshot از خروجی وجود دارد:$pngFileContent = $driver->takeScreenshot(); Storage::put('/screenshots/1.png', $pngFileContent);متد takeScreenshot محتوای png را برگرداند و با فساد Storage در لاراول آن را ذخیره کردیم. اگر خواستید، آدرس فایل را به طور مستقیم به عنوان آرگومان متد takeScreenshot بدهید تا کار ذخیره‌سازی را هم انجام دهد.این تنها گوشه‌ای از قابلیت‌های Browser Automation است و در عمل ده‌ها کاربرد مختلف برای آن وجود دارد. اگر کار جالبی انجام دادید، می‌توانید در کامنت بگویید و با پیشنهادات و انتقاداتتان به تکمیل این مقاله کمک کنید.