طریقه ی ساخت یک WebCrawler بوسیله ی Selenium
1396/10/16 17:50 , شایان مسلمی

طریقه ی ساخت یک WebCrawler بوسیله ی Selenium

خزیدن وبی به منظور اتوماتیک سازی کارهای بخصوصی انجام میگیرد و برای سایت ها کاملاً سودمند است.شما میتوانید یک خزنده بنویسید تا بتواند درست همانند یک انسان با یک سایت تعامل داشته باشد.

این روش برای سایت هایی که از JavaScript به مقدار زیاد استفاده کرده اند جوابگو نخواهد بود،در این مواقع،میتوانید یک خزنده بنویسید که از گوگل کروم استفاده کند و جاوااسکریپت را مشابه یک کاربر عادی در مرورگر کروم اداره کند.

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

  • راه اندازی سلنیوم
  • استفاده از Google Chrome Inspector برای شناسایی بخش های صفحه وب
  • نوشتن یک برنامه ی جاوا برای خودکارسازی گوگل کروم

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

 

راه اندازی سلنیوم

درایور وب

همانطور که در بالا توضیح داده شد،سلنیوم از یک محتوای نرم افزاری تشکیل شده که به عنوان یک فرآیند جداگانه اجرا میشود و فعالیت هایی در رابطه با برنامه ی جاوا دارد.این محتوا Web Driver نامیده می شود و باید برای کامپیوترتان دانلود شود.

اینجا را کلیک کنید تا به سایت سلنیوم بروید،روی آخرین نسخه کلیک کنید و فایل مناسب را برای سیستم عاملتان دانلود کنید.این فایل شامل یک زیپ آرشیو است که chromedriver.exe را در خود دارد.آن را به محل دلخواهتان اکسترکت کنید مثلاً C:/WebDrivers/Chromedriver.exe

 

ماژول های جاوا

مرحله ی بعدی،راه اندازی ماژول های جاوا برای استفاده ی سلنیوم است.فرض میکنیم که شما از Maven برای ساخت برنامه ی جاوا استفاده میکنید،این دستور ارتباطی را به POM.xml اضافه کنید:

<dependencies>

 <dependency>

 <groupId>org.seleniumhq.selenium</groupId>

 <artifactId>selenium-java</artifactId>

 <version>3.8.1</version>

 </dependency>

 </dependencies>

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

 

مراحل اولیه ی سلنیوم

بیایید به سراغ سلنیوم برویم.گام اول ساخت یک نمونه ی ChromeDriver است:

WebDriver driver = new ChromeDriver();

 

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

driver.get("http://www.google.com");

 

یک منبع برای عنصر ورودی متن به دست بیاورید تا بتوان یک جست و جو را انجام داد.عنصر ورودی متن دارای نام q. می باشد.ما عناصر HTML را روی صفحه از این روش شناسایی می کنیم:

WebElement element = driver.findElement(By.name("q"));

 

شما میتوانید با استفاده از روش sendKeys() متن را به هر عنصری ارسال نمایید.بیایید یک شرایط جست و جو ارسال کنیم و آن را با یک خط جدید پایان ببریم تا جست و جو فوراً آغاز شود.

element.sendKeys("terminator\n");

 

حال که جست و جو در حال انجام است،باید برای صفحه ی نتایج منتظر باشیم.میتوان آن را به این وسیله انجام داد:

new WebDriverWait(driver, 10)

 .until(d -> d.getTitle().toLowerCase().startsWith("terminator"));

 

این کد به سلنیوم میگوید که 10 ثانیه منتظر بماند و زمانی که عنوان صفحه با terminator کار خود را آغاز میکند،برگردد. ما از قابلیت lambda برای تعریف شرایط منتظر ماندن استفاده می کنیم.

حالا میتوانیم عنوان صفحه را بگیریم.

System.out.println("Title: " + driver.getTitle());

 

زمانی که کارتان در این بخش تمام شد،پنجره ی مرورگر به این شکل باید بسته شود:

driver.quit();

 

این یک نمونه از کنترل مرورگر در حال استفاده از جاوا بوسیله ی سلنیوم بود.به نظر کاملاً ساده می رسد،اما به شما این امکان را می دهد که چیزهای زیادی را برنامه نویسی کنید که به طور طبیعی باید دستی آنها را انجام دهید.

 

استفاده از Google Chrome Inspector

Google Chrome Inspector یک ابزار گرانبها برای شناسایی عناصری است که از سلنیوم استفاده می کنند.این ما را قادر می سازد تا عنصری را از جاوا برای اکسترکت اطلاعات همانند یک فعالیت تعاملی مثل کلیک کردن روی یک دکمه،هدف گیری بکنیم.در اینجا یک آغازگر برای چگونگی استفاده از Inspector وجود دارد.

گوگل کروم را باز کنید و به یک صفحه بروید،مثلاً سایت IMDB و فیلم Justice League.

بیایید عنصری را که میخواهید شناسایی کنید را پیدا کنیم،مثلاً خلاصه ی فیلم.روی summary کلیک راست کنید و “Inspect” را از منو انتخاب کنید.

 از تب “Elements”،میتوانیم بفهمیم که متن خلاصه یک div با کلاس summary text است.

 

استفاده از CSS یا XPath برای انتخاب کردن

سلنیوم عناصر انتخابی صفحه را که از CSS استفاده میکنند، پشتیبانی میکند.برای مثال، به منظور انتخاب متن خلاصه از صفحه ی IMDB بالا میتوانیم بنویسیم:

WebElement summaryEl = driver.findElement(By.cssSelector("div.summary_text"));

 

شما میتوانید از XPath برای انتخاب عناصر به طور مشابه بالا استفاده کنید.دوباره،برای انتخاب متن خلاصه،اینکار را انجام میدهیم:

WebElement summaryEl = driver.findElement(By.xpath("//div[@class='summary_text']"));

 

XPath و CSS قابلیت های مشابهی دارند،بنابراین انتخاب با شما است که ببینید با کدامیک راحتتر هستید.

 

خواندن Google Mail از جاوا

حالا مثال دشوارتری را بررسی می کنیم:بارگذاری(fetch) کوگل میل.

Chrome Driver را اجرا کنید،به gmail.com بروید و صبر کنید تا صفحه لود شود.

WebDriver driver = new ChromeDriver();

driver.get("https://gmail.com");

new WebDriverWait(driver, 10)

 .until(d -> d.getTitle().toLowerCase().startsWith("gmail"));

 

سپس، به دنبال بخش ایمیل بگردید (نام identifierId دارد) و آدرس ایمیل را وارد کنید.روی دکمه ی Next کلیک کنید و منتظر بمانید تا صفحه ی رمز عبور لود شود.

/* Type in username/email */

{

 driver.findElement(By.cssSelector("#identifierId")).sendKeys(email);

 driver.findElement(By.cssSelector(".RveJvd")).click();

}

 

new WebDriverWait(driver, 10)

 .until(d -> ! d.findElements(By.xpath("//div[@id='password']")).isEmpty() );

 

حالا،باید رمز عبور را وارد کنید،دوباره روی دکمه ی Next کلیک کنید و صبر کنید تا صفحه ی Gmail لود شود.

/* Type in password */

{

 driver

 .findElement(By.xpath("//div[@id='password']//input[@type='password']"))

 .sendKeys(password);

 driver.findElement(By.cssSelector(".RveJvd")).click();

}

 

new WebDriverWait(driver, 10)

 .until(d -> ! d.findElements(By.xpath("//div[@class='Cp']")).isEmpty() );

 

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

List<WebElement> rows = driver

 .findElements(By.xpath("//div[@class='Cp']//table/tbody/tr"));

for (WebElement tr : rows) {

}

 

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

{

 /* From Element */

 System.out.println("From: ");

 for (WebElement e : tr

 .findElements(By.xpath(".//div[@class='yW']/*"))) {

 System.out.println(" " +

 e.getAttribute("email") + ", " +

 e.getAttribute("name") + ", " +

 e.getText());

 }

}

حال،موضوع را بازآوری کنید.

{

 /* Subject */

 System.out.println("Sub: " + tr.findElement(By.xpath(".//div[@class='y6']")).getText());

}

 

و زمان و تاریخ پیام ها.

{

 /* Date/Time */

 WebElement dt = tr.findElement(By.xpath("./td[8]/*"));

 System.out.println("Date: " + dt.getAttribute("title") + ", " +

 dt.getText());

}

مجموع تعداد ردیف های صفحه بدینگونه است:

System.out.println(rows.size() + " mails.");

 

و در پایان مرورگر را ببندید چون کارمان تمام شده است.

driver.quit();

 

در خلاصه ، میتوان گفت که از سلنیوم با گوگل کروم میتوانید برای خزیدن سایت هایی که از جاوااسکریپت استفاده ی سنگینی دارند،استفاده کنید.و با Google Chrome Inspector، کار کردن با CSS یا XPath ، اکسترکت کردن یا برقراری تعامل با یک عنصر ساده تر شده است.

آیا شما پروژه ای دارید که سلنیوم در آن به کار گرفته شده باشد؟شما با چه مشکلاتی در این زمینه روبرو شده اید؟ نظراتان را با ما در میان بگذارید.

 

منبع : MakeUseOf

 مطالب مرتبط

طریقه ساخت یک ربات خزنده اولیه برای تخلیه اطلاعات یک سایت!
ایجاد یک فرم HTML و قابلیت تکمیل خودکار فرم‌ها
۸ بازی ساخته شده با Unity توسط تیم‌های کوچک یا تک‌نفره
۹ چیز که باید در مورد HTML5 بدانید
آموزش گام به گام #C
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات