شیوا محمدی
شیوا محمدی

  • تاریخ عضویت: 1396/07/21
  • آخرین زمان حضور : ‫۱ ماه قبل، دو شنبه ۱۴ آبان ۱۳۹۷، ساعت ۱۵:۳۰
  • بازدید از پروفایل : 106

گزارش خطا

علت گزارش برای را بنویسید


چگونه با سلنیوم یک وب کراولر ایجاد کنیم؟ (ساخت خزنده وب)

گزارش

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

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

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

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

  • تنظیم سلنیوم
  • استفاده از اینسپکتور گوگل کروم به منظور تشخیص عناصر صفحه وب
  • نوشتن یک برنامه جاوا به منظور خودکارسازی گوگل کروم

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

تنظیم سلنیوم

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

وب درایور

با رفتن به صفحه‌ای مخصوص در وب سایت Google می‌توانید به صفحه دانلود سلنیوم وارد شوید. در ادامه باید بر روی جدیدترین ریلیز آن کلیک کرده و فایل مناسب با سیستم عامل خود (ویندوز، لینوکس و یا مک) را انتخاب کنید. بسته دانلودی، یک فایل دارای پسوند ZIP بوده و درون آن فایلی قابل اجرا با نام 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 است. در اینجا با استفاده از متد ()WebDriver.findElement عناصر HTML درون صفحه را پیدا می‌کنیم:

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

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

element.sendKeys(“terminator\n”);

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

new WebDriverWait(driver, 10)
.until(d -> d.getTitle().toLowerCase().startsWith(“terminator”));

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

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

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

driver.quit();

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

استفاده از اینسپکتور گوگل کروم

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

گوگل کروم را باز کرده و یک صفحه وب باز کنید. به عنوان نمونه ما در این مطلب، به صفحه فیلم Justice League (2017) در وب سایت IMDb رفته‌ایم. اکنون می‌خواهیم عناصری مورد نظر برای نشانه گرفتن را پیدا کنیم. مثلا در اینجا بخش خلاصه فیلم مد نظر است. بر روی بخش خلاصه (Summary) کلیک راست کرده و گزینه Inspect را انتخاب کنید.

در تب Elements می‌توان نوشته مربوط به بخش خلاصه را مشاهده کرد که درون یک تگ div به همراه کلاس summary_text قرار دارد.

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

در سلنیوم از انتخاب عناصر صفحه با استفاده از CSS پشتیبانی می‌شود. به عنوان نمونه برای انتخاب متن مربوط به بخش خلاصه از صفحه بالا می‌توان نوشت:

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

کاربران حتی قادر هستند از XPath به منظور انتخاب عناصر به شیوه‌ای تقریبا یکسان استفاده کنند. مجددا برای انتخاب متن خلاصه باید نوشت:

WebElement summaryEl = driver.findElement(By.xpath(“//div[@class=’summary_text’]”));

XPath و CSS هر دو قابلیت‌های مشابهی دارند، پس انتخاب یکی از آن‌ها تنها به سلیقه کاربر برمی‌گردد.

خواندن گوگل میل از جاوا

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

کار را با 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 را مجددا انتخاب کنید. سپس باید تا بارگذاری صفحه جیمیل منتظر ماند.

/* 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();

به منظور تکرار می‌توان از سلنیوم با گوگل کروم، برای خزیدن در میان وب سایت‌هایی که دارای انبوهی از کدهای جاوااسکریپ هستند استفاده کرد. با استفاده از گوگل کروم اینسپکتور می‌توان اطلاعات زیادی درباره CSS و XPath به دست آورد. این اطلاعات برای اجرای دستورات بعدی بسیار کاربردی خواهند بود.

منبع

 

شیوا محمدی

پسندیده شده توسط: مجید مرادی , شهرام برزنی

یادگیری کاتلین برای چه کسانی مناسب است؟

گزارش

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

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

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

افراد مبتدی:

اگر شما جز کسانی هستید که در ابتدای راه یادگیری برنامه نویسی هستید و تازه کار به حساب میاید پیشنهاد میشه که سراغ کاتلین نروید, البته فقط پیشنهاد میکنم اجباری در این زمینه وجود نداره. اما به چه علت توصیه نمیشه, کاتلین هنوز ابتدای راه قرار داره منابع آموزشی برای کاتلین در حال حاضر به اندازه دیگر زبان های برنامه نویسی مثل جاوا,سی شارپ و.. وجود نداره پس برای افراد تازه کار شاید سخت باشه یادگیری این زبان فعلا. همچنین داخل وبسایت StackOverFlow تعداد سوالات بسیار کمتری به نسب دیگر زبان ها برای کاتلین وجود داره. از طرفی زبان های برنامه نویسی دیگه مثل جاوا جوابگوی پاسخ های شما برای پروژه ها هستند و تا سال ها هم به احتمال زیاد خواهند بود و قرار نیست این زبان ها منسوخ شوند حداقل به این زودی ها.

افراد متوسط:

اگر با زبان های برنامه نویسی به خصوص جاوا آشنا دارید و چند پروژه شخصی یا برای کسانی انجام داده اید میتونید با محدود منابع موجود کم کم کاتلین و یاد بگیرید ولی انتظار نداشته باشید در پروژه بعدی خودتون 100% از کاتلین استفاده کنید. میتونید برای مثال اگر برای موبایل برنامه مینویسید چند اکتیویتی هم با کاتلین پیاده سازی کنید تا با این زبان شیرین آشنا شوید.

افراد حرفه ای:

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

منبع

شیوا محمدی

پسندیده شده توسط: مجید مرادی , شهرام برزنی , حمیددواچی , مشب

معرفی زبان برنامه نویسی kotlin

گزارش

یکی از زبان های برنامه نویسی جدیدی که مورد استقبال شرکت های بزرگ نمر افزاری قرار گرفته است زبانی به نام kotlin می باشد. داستان این زبان برنامه نویسی از آنجایی شروع می شود که شرکت اپل برای برنامه نویسی سیستم های iOS زبان برنامه نویسی swift را ارائه کرد. به دنبال این کار برنامه نویسان اندروید نیز خواستار زبان مشابه swift برای اندروید شدند. زبان kotlin با استفاده از ماشین مجازی JVM اجرا می شود و شباهت های زیادی به زبان swift دارد. همچنین زبان kotlin یک زبان نوع استاتیک است که توسط شرکت jetbrains ارائه شده است. شرکت jetbrains شرکتی است که محصولاتی مانند resharper, Intellij idea, phpStorm , web storm را برای راحتی و کار سریع برنامه نویسان ارائه کرده است. حتی برنامه اندروید استودیو هم بر پایه محصول intellij idea این شرکت ساخته شده است.

مشخصات زبان kotlin

 

سینتکس زبان kotlin قابل درک تر از سینتکس زبان جاوا است و مختصر تر از زبان جاوا است. از قابلیت های دیگر این زبان lambda expression و بارگذاری عملگر ها (operator overloading) و توابعی که با توابع کار می کنند (higher-order functions) می باشد. این توابع توابعی هستند که یا ورودی آنها تابع است یا خروجی آنها یک تابع است. زبان kotlin می تواند با زبان جاوا همکاری و تعامل داشته باشد بنابراین می توان در یک پروژه از هردوی این زبان ها باهم استفاده کرد. اگر شما یک برنامه نویس جاوا باشید می توانید زبان kotlin را در مدت زمان خیلی کوتاهی یاد بگیرید. در ادامه به خصوصیات این زبان برنامه نویسی به شکل فنی خواهیم پرداخت. دقت داشته باشید که برای این که این مطلب را درک کنید لازم است که با سینتکس زبان جاوا آشنایی نصبی داشته باشید..

کلاس ها در زبان kotlin

 

برای ساخت کلاس در کتلین شما باید از کلمه کلیدی class استفاده کنید. برای مثال اگر شما قصد دارید که یک کلاس خالی با نام Person بسازید باید مانند کد زیر عمل کنید.

Class Person{
}

افزودن خصوصیاتی مانند فیلد ها در زبان kotlin

در برنامه نویسی شی گرا معمولا یک کلاس دارای فیلد ها و متدها می باشد. حال اگر بخواهیم به کلاس Person که ساختیم دو فیلد اضافه کنیم باید به شکل زیر عمل کنیم. در کد زیر دو فیلد تعریف شده است که یکی name است که از نوع رشته ای و دیگری age است که از نوع عدد صحیح است.

var name: String = ""
var age: Int = 0

همانطور که می بینید نحوه تعریف فیلد و متغیر با جاوا فرق دارد. در زبان kotlin برای تعریف متغیر شما باید از کلمه کلیدی var استفاده کنید. در حالی که در جاوا اینگونه نیست. همچنین اگر شما بخواهید در کتلین یک متغیر read only یا فقط خواندنی داشته باشید باید از کلمه کلیدی val به جای var استفاده کنید. همچنین برای فیلد هایی که می توانند null باشند یا نباشند نیز کتلین راه حل هایی در نظر گرفته است و این دو نوع متغیر را از هم جدا کرده است یعنی متغیر هایی که می توانند مقدار null بگیرند و متغیرهایی که هیچ وقت نمی توانند null باشند و اگر null شوند کامپایلر خطا خواهد داد. متغیرهای age و name که تعریف کردیم از این نوع است و نمی توانند null باشند. برای این که متغیری بتواند مقدار null هم بگیرد باید هنگام تعریف آن از علامت سوال بعد از نوع متغیر استفاده کرد (این روش در زبان سی شارپ هم وجود دارد.) مانند مثال زیر

var college: String? = null

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

var jake = Person()

وقتی که یک شئ از یک کلاس ساخته شد مانند زبان جاوا می توان از فیلد های آن استفاده کرد و آنها را مقدار دهی نمود و یا مقادیر آنها را خواند مانند کد زیر:

jake.name = "Jake Hill"
jake.age = 24
jake.college = "Stephen's College"

استفاده از سازنده ها (constructor) در کتلین

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

class Person(var name: String, var age: Int, var college: String?) {
 
}

همانگونه که می بینید هنگام تعریف کلاس شما contructor را هم مشخص می کنید. ولی معمولا کلاس ها بیش از یک constructor دارند. اما نمی توانیم که چند تا کلاس با یک نام تعریف کنیم حال برای این که چند constructor در یک کلاس داشته باشیم باید چکار کنیم؟ برای حل این مشکل باید از کلمه کلیدی constructor استفاده کنیم که به این سازنده های سازنده های ثانویه می گوییم که در سازنده های ثانویه با استفاده از کلمه کلیدی this باید سازنده اصلی را مقدار دهی کنیم و ورودی های سازنده اصلی را نیز مقدار دهی کنیم. برای مثال باید کد را به شکل زیر بنویسیم.

class Person(var name: String, var age: Int, var college: String?) {
     
    var email: String = ""
 
    constructor(name:String, age:Int, college: String?, email: String) : this(name, age, college) {
        this.email = email
    }
}

حال اگر بخواهیم یک شی از کلاس بسازیم باید کد آن را به شکل زیر بنویسیم.

var jake = Person("Jake Hill", 24, "Stephen's College", "jake.hill@example.com")

متدهای کلاس(توابع عضو کلاس) در زبان kotlin

در کتلین برای این که یک تابع یا متد را تعریف کنیم باید از کلمه کلیدی fun استفاده کنیم. برای این که یک متد ساده تعریف کنیم به شکل زیر کد می نویسیم. در کد زیر یک متد به نام isChild تعریف کرده ایم که خروجی آن یک مقدار Boolean می باشد.

fun isChild (): Boolean {
    return age < 18
}

در متد بالا اگر سن زیر 18 سال باشد خروجی true و در غیر این صورت مقدار false برمی گرداند. برای فراخوانی این متد به همان روش جاوا باید عمل کنیم. مانند شکل زیر کد می نویسیم.

jake.isChild()

تا به این قسمت به توضیح مفاهیم و سینتکس های زبان برنامه نویسی کتلین اشاره کردیم و گفتیم که تفاوت این زبان با جاوا در چه قسمت هایی است.

نویسنده: مهدی عادلی فر
منبع: Itpro

 

 

 

شیوا محمدی

پسندیده شده توسط: مجید مرادی , شهرام برزنی , مشب
ثبت نام ورود