آموزش کامل ایجاد خزشگر با استفاده از سلنیوم و PHP

سلنیوم یک ابزار قدرتمند برای کراول (Crawl) کردن صفحات وب به ویژه صفحات دارای لود AJAX و نیاز به تعامل یا لاگین است. نرم افزار Selenium قابلیت اتصال و استفاده در زبان های برنامه نویسی مختلفی نظیر PHP، پایتون، سی‌پارپ، جاوااسکریپت و جاوا دارد. برای استفاده از این برنامه در PHP می‌توان با کمک کتابخانه WebDriver به دستورات و عملیات مختلف آن دسترسی پیدا کرد.
آموزش کامل ایجاد خزشگر با استفاده از سلنیوم و PHP

مهمترین و بزرگترین منبع دریافت دیتا، محیط وب و سایت های اینترنتی هستند. سلنیوم یکی از بهترین نرم‌افزارهای ایجاد خزشگرهای وب است که در این مقاله به طور مفصل نحوه دریافت اطلاعات یا انجام عملیات روتین و دارای الگوریتم را به شما خواهیم آموخت.

چه زمانی باید از سلنیوم استفاده کنم؟

برای ایجاد یک خزشگر اینترنتی (Crawler) راه‌های مختلفی وجود دارد که توسط هر زبان برنامه نویسی قابل انجام است. اما سلنیوم یک تفاوت بزرگ با همه‌ آنها دارد. Selenium با کمک یک مرورگر (مانند کروم یا فایرفاکس) اجرا می‌شود و این امکان را به شما میدهد تا ربات هایی را طراحی کنید که بتوانند مانند کاربران واقعی با وب سایت ها تعامل کنند و اطلاعات آنها را دریافت کنند.

به طور کلی برای هر کاربردی می توانید از سلنیوم استفاده کنید. البته در مواجهه با سایت‌هایی که محتویات آن در منبع صفحات آن نیست ناچار به استفاده از سلنیوم هستید و کتابخانه‌های متداول خزش در وب کمکی به شما نخواهند کرد. معمولاً برای دریافت اطلاعات از سایت هایی که با استفاده از React.js یا Vue.js طراحی شده و دارای لود اطلاعات به صورت AJAX هستند باید از سلنیوم استفاده کنید.

خزش کردن در وب با سلنیوم و PHP

سلنیوم با کدام زبان‌های برنامه نویسی کار می‌کند؟

خود سلنیوم با استفاده از جاوا طراحی شده و روی سیستم‌عامل‌های لینوکس اندروید و مک قابل اجرا است. همچنین با کمک زبان های برنامه نویسی مختلف امکان اتصال به سلنیوم و استفاده از آن وجود دارد و از جمله پر استفاده ترین آنها جاوا، پایتون، سی‌شارپ، روبی، کاتلین، جاوا اسکریپت و PHP است.

هم اکنون به تشریح نحوه استفاده از سلنیوم در PHP خواهیم پرداخت. برای آشنایی با بکار گیری آن در زبان‌های برنامه نویسی دیگر به وب سایت رسمی سلنیوم مراجعه کنید.

همینطور اگر نیاز به توضیحات بیشتری برای استفاده از سلنیوم در PHP داشتید به سایت hotexamples مراجعه کنید.

راهنمای استفاده از سلنیوم (Selenium) در PHP

در ابتدا توجه داشته باشید روش ها و کتابخانه های مختلفی برای استفاده از سلنیوم در PHP وجود دارد. اما بعضی از آنها باگ دارند یا دیگر از کار افتاده اند. ما روش‌های مختلف را بررسی کرده‌ایم و هم اکنون بهترین آن را شرح می‌دهیم.

مرحله اول: نصب و راه‌اندازی سلنیوم

1-1: نصب جاوا

همانطور که گفته شد برای راه‌اندازی سلنیوم ابتدا لازم است ماشین مجازی جاوا (JVM) را روی سیستم یا سرور نصب کنید. بنابراین ابتدا نسخه متناسب با سیستم عامل خود را انتخاب و نصب کنید. می توانید با زدن کد زیر در خط فرمان (Command line) از صحت نصب و نسخه آن مطلع شوید.

Command:

java -version

 Output:

java version "1.8.0_281"

Java(TM) SE Runtime Environment (build 1.8.0_281-b09)

Java HotSpot(TM) 64-Bit Server VM (build 25.281-b09, mixed mode)

 

1-2: نصب سلنیوم

حالا باید برنامه سلنیوم را دانلود و اجرا کنید. آخرین نسخه فعلی آن selenium server 4.1.2 می‌باشد. اما این ورژن با کتابخانه های PHP همخوانی کامل ندارد و باگ‌های زیادی دارد. بنابر این فقط از selenium server standalone-3.4.0 استفاده کنید. می‌توانید این نسخه را به صورت مستقیم یا از گیت هاب سلنیوم سرور دانلود کنید.

دانلود سلنیوم 3.4

1-3: اجرای سلنیوم

در خط فرمان به آدرس فایل دانلود شده بروید و با دستور زیر سلنیوم را اجرا کنید.

 Command:

java -jar selenium-server-standalone-3.4.0.jar

 پورت پیشفرض اجرای آن 4444 می‌باشد. در صورتی که این پورت توسط برنامه دیگری اشغال شده است از کد زیر برای اجرا در port دیگر استفاده کنید.

 Command:

java -jar selenium-server-standalone-3.4.0.jar -p 555

 

 برای اجرای سلنیوم 4.1.2 از دستور زیر استفاده کنید. (توصیه نمی‌شود!)

 Command:

java -jar selenium-server-4.1.2.jar --ext example.jar;dir standalone --port 4444

مرحله دوم: نصب کتابخانه facebook/webdriver

2-1: ایجاد فایل کامپوزر

ابتدا قبل از این مرحله کامپوزر (Composer) را نصب کنید. حالا در پوشه مد نظر یک فایل با نام composer.json ایجاد کرده و کدهای زیر را در آن قرار دهید.

Json:

{
   
"require": {
       
"facebook/webdriver": "^1.1"
   
}
}

 

سپس در خط فرمان دستور زیر را بزنید و صبر کنید تا کتابخانه آن از اینترنت دانلود شود.

2-2: نصب با کمک Composer

 Command:

composer install

 

جهت اطمینان از نصب کامل آن به پوشه vendor بروید و وجود فایل autoload.php را چک کنید. برای استفاده از کتابخانه webdriver سلنیوم باید از این فایل استفاده کنیم.

 

مرحله سوم: دریافت درایور مرورگر

آخرین پیش نیاز برای استفاده از آن، نصب درایور مرورگر است. برای آنکه بتوانیم توسط نرم افزار سلنیوم به مرورگر متصل شویم، باید برنامه درایور مخصوص آن را نصب کنیم.

برای دانلود درایور گوگل کروم به صفحه مربوط به آن مراجعه و بر اساس نسخه مورد استفاده آن را دریافت کنید. و یا عبارت chromedriver را در گوگل سرچ نمایید.

برای دانلود درایور فایرفاکس به صفحه گیت هاب آن مراجعه و  نسخه مد نظرتان را دریافت کنید. و یا عبارت geckodriver را در گوگل سرچ نمایید.

 

حالا فقط کافی است تا نرم افزار آن را از فایل zip استخراج کنید و در همان پوشه در کنار فایل سلنیوم قرار دهید.

تا اینجای کار فایل‌های مورد استفاده برای ایجاد خزشگر تکمیل شده. فایل‌های موجود باید مطابق با تصویر زیر باشد.

فایل‌های پیش‌نیاز استفاده از سلنیوم

فایل‌های پیش‌نیاز استفاده از سلنیوم

مرحله چهارم: نوشتن کد‌های PHP

حالا که همه چیز آماده است وقتشه که دست به کد بشیم و یه برنامه ساده برای دریافت اطلاعات همین مطلب از سایت درست کنیم.

4-1: نمونه راه اندازی خزشگر

PHP:


### فراخوانی فایلهای کتابخانه
require_once __DIR__."/vendor/autoload.php";

### فراخوانی فضای نام های مورد نیاز
use Facebook\WebDriver;
use Facebook\WebDriver\Remote;
use Facebook\WebDriver\WebDriverBy;

### تنظیم آدرس هاست اجرای سلنیوم
#### برای سلنیوم 4.1.2

$host = "http://localhost:4444";
#### برای سلنیوم 3.4.0
$host = "http://localhost:4444/wd/hub";

### ایجاد درایور خزشگر
#### برای گوگل کروم
$driver = Remote\RemoteWebDriver::create($host,Remote\DesiredCapabilities::chrome());

#### برای فایرفاکس
//$driver = Remote\RemoteWebDriver::create($host,Remote\DesiredCapabilities::firefox());

### آدرس صفحه وبسایت
$driver->get("https://datamining.biz/b/5");

### تنظیم سایز صفحه
$driver->manage()->window()->maximize();

پس از اجرای این دستورات یک پنجره جدید از مرورگر باز شده و همین مطلب را مشاهده خواهید کرد. اجرای فایل php می‌تواند به هر دو روش CLI و GUI انجام شود.

 

حالا می‌خواهیم مطالب این صفحه را دریافت کنیم. برای این کار می‌توان از id،  CSS class name، Xpath و حتی متن المان‌ها استفاده کرد.‌

برای پی بردن به Xpath المان‌ها، صفحه را در مرورگر خود باز کرده و وارد بخش inspect element شوید (معمولا با F12). پس از انتخاب بخش مد نظر در قسمت کدها، روی آن راست کلیک کرده، کپی و Copy Xpath را انتخاب کنید.

به عنوان مثال Xpath محل قرارگیری محتوای مطالب سایت به صورت زیر است.

 Xpath:

/html/body/main/section/div/div/div[1]/div[3]

 با اضافه کردن کد زیر به فایل php، مشخصات این مطلب را دریافت و نمایش می‌دهیم.

 PHP:

### پیدا کردن المان بر اساس Xpath
$element = $driver->findElement(WebDriverBy::xpath('/html/body/main/section/div/div/div[1]/div[3]'));

### دریافت متن المان
$content = $element->getText();

### دریافت عنوان صفحه
$title = $driver->getTitle();


### نمایش متن و عنوان مطلب
echo $content . "\n";
echo $title  . "\n";

 

گاهی لازم میشه توی سایتی لاگین کنیم یا توسط ربات یک فرم را پر کنیم. با اضافه کردن کد زیر به فایل php، یک پیام در قسمت چت با پشتیبانی سایت ارسال می‌کنیم. از این نمونه میتونید برای فرم‌های لاگین و ... هم استفاده کنید.

PHP:

### ایجاد تاخیر تا زمان لود شدن بخش پشتیبان
sleep(8);

### تعریف متنی برای ارسال
$text = "سلام، با کمک آموزش سلنیوم تونستم یه پیام ارسال کنم. این واقعا عالیه :)";


### باز کردن بخش چت با کلیک روی دکمه آن در فوتر
$link = $driver->findElement(WebDriverBy::linkText('پشتیبانی آنلاین'))->click();
### نوشتن متن در باکس مربوطه و ارسال آن
$textBox = $driver->findElement(WebDriverBy::name('message'))->sendKeys($text)->submit();

 

حالا همینطور که مشاهده می‌کنید تونستیم با کمک این ربات یک پیام ارسال کنیم.

پیام ارسالی ربات

پیام ارسالی ربات

 

کد کامل مثال:

PHP:


### فراخوانی فایلهای کتابخانه
require_once __DIR__."/vendor/autoload.php";

### فراخوانی فضای نام های مورد نیاز
use Facebook\WebDriver;
use Facebook\WebDriver\Remote;
use Facebook\WebDriver\WebDriverBy;

### تنظیم آدرس هاست اجرای سلنیوم
#### برای سلنیوم 4.1.2
$host = "http://localhost:4444";
#### برای سلنیوم 3.4.0
$host = "http://localhost:4444/wd/hub";

### ایجاد درایور خزشگر
#### برای گوگل کروم
$driver = Remote\RemoteWebDriver::create($host,Remote\DesiredCapabilities::chrome());
#### برای فایر فاکس
//$driver = Remote\RemoteWebDriver::create($host,Remote\DesiredCapabilities::firefox());

### آدرس صفحه وبسایت
$driver->get("https://datamining.biz/b/4");
### تنظیم سایز صفحه
$driver->manage()->window()->maximize();

### پیدا کردن المان بر اساس Xpath
$element = $driver->findElement(WebDriverBy::xpath('/html/body/main/section/div/div/div[1]/div[3]'));
### دریافت متن المان
$content = $element->getText();
### دریافت عنوان صفحه
$title = $driver->getTitle();

### نمایش متن و عنوان مطلب
echo $content . "\n";
echo $title  . "\n";


### ایجاد تاخیر تا زمان لود شدن بخش پشتیبانی
sleep(8);
### تعریف متنی برای ارسال
$text = "سلام، با کمک آموزش سلنیوم تونستم یه پیام ارسال کنم. این واقعا عالیه :) \n";


### باز کردن بخش چت با کلیک روی دکمه آن در فوتر
$link = $driver->findElement(WebDriverBy::linkText('پشتیبانی آنلاین'))->click();
### نوشتن متن در باکس مربوطه و ارسال آن
$textBox = $driver->findElement(WebDriverBy::name('message'))->sendKeys($text)->submit();

 

البته لازم است این نکته را بدانید مه برای خزش کردن تعداد زیادی از صفحات وب، استفاده از سلنیوم به دلیل سرعت پایین‌ آن، چندان به صرفه نیست. اما برای موارد خاص راهی جز استفاده از آن نخواهید داشت. کماکان سعی کنید در موارد ممکن با دریافت کد صفحه و تجزیه آن اطلاعات مورد نیاز را به دست آورید.

 در صورت وجود هر گونه سؤال یا بحثی درباره این مطلب، از طریق بخش چت آنلاین سایت با ما ارتباط بگیرید. از مکالمه با شما خوشحال می‌شویم 😀

جهت ثبت سفارش وب‌اسکرپ شماره تماس و  توضیحات مختصری از سفارش خود را در بخش پشتیبانی ارسال نمایید. کارشناسان ما با شما تماس خواهند گرفت.