در مطلب گام شروع در وب اسکرپینگ با Selenium توضیح دادیم که می توانیم برای دسترسی به یک المان (تگ) درون صفحه وب، شناسه (Id) آن را درون متد ()find_element_by_id بفرستیم. بنابراین id، یکی از روش هایی است که از آن برای پیدا کردن یک تگ ویژه کمک گرفته می شود. به طور کلی بوسیله Selenium می توانیم به تگ های متنی، تصویری، لینک ها، radio button ها، ‌checkbox ها، textarea ها، list bix ها، drop down ها، جدول ها و غیره دسترسی داشته باشیم.

در کنار شناسه (id) تگ می توانیم از کلاس برای دسترسی به تگ ها استفاده کنیم، پس برای این منظور می بایست متد ()find_element_by_class_name را به کار ببریم. اگر خصوصیت name تگ مقدار دهی شده باشد، پس روش دیگر جستجوی تگ بر اساس خصوصیت name خواهد بود. برای این منظور می بایست متد ()find_element_by_name را به کار ببرید.

متد جالب دیگری که وجود دارد، ()find_element_by_link_text نام دارد که بوسیله آن می توانیم یک تگ a یا یک لینک (پیوند) را بوسیله نام آن، پیدا کنیم. در واقع برای دسترسی به تگ a، از نامی که با آن انتساب داده شده است، مثلا Login استفاده می کنیم. یکی دیگر از راه های دسترسی به تگ، دسترسی به آن بوسیله نام تگ است، برای این منظور می بایست از متد ()find_element_by_tag_name استفاده کنیم.

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

توجه کنید در شکل بالا در تگ for خصوصیت (ویژگی) id و در تگ های input خصوصیت name مقداردهی شده اند، بنابراین با توجه به نیاز، می توان از متد ()find_element_by_id برای دسترسی به تگ form و یا از متد ()find_element_by_name برای دسترسی به هر کدام از تگ های input درون فرم استفاده کرد. بازهم تاکید می کنیم که هر کدام از متدهای این مطلب، نخستین تگ تطابق داده شده با ورودی متدها را برگشت می دهد.

توجه کنید در هر سه کد زیر، متغیر driver نمونه ای از کلاس یکی از درایورهای مرورگر، مانند کلاس Chrome یا حتی FireFox و غیره است. ما در این مطلب از کلاس Chrome برای دسترسی به درایور مرورگر Chrome استفاده کرده ایم، پس متغیر driver نمونه ای از این کلاس است ولی برای شما می تواند نمونه ای از کلاس FireFox برای دسترسی به درایور مرورگر FireFox باشد.

پیمایش درون صفحه با Selenium

در این بخش می خواهیم دو مطلب، نخست استفاده از متد ()find_element_by_name و ()find_element_by_text_link برای دسترس به تگ صفحه وب و مطلب دیگر آموزش چگونگی انجام پیامیش و حرکت و پیمایش (Navigation) در میان برگه های متفاوت را آموزش دهیم. در شکل زیر می خواهیم لینک (پیوند) Downlowd از صفحه خانگی سایت python.org را انتخاب و سپس به صورت خودکار و بدون تعامل کاربر، وارد آن صفحه شویم. در واقع می خواهیم میان صفحه های (لینک های) صفحه وب پیمایش کنیم. بنابراین باید دو گام زیر را برای این مطلب باید دو گام زیر را انجام دهید:

۱ – بدست آوردن و دسترسی به تگ لینک Download بوسیله متد ()find_element_by_link_text

۲ – کلیک خودکار روی لینک که به عبارتی منظورمان کلیک خودکار و شبیه سازی شده (همانند سازی شده) روی لینک بوسیله کلید ماوس است.

همانطور که در شکل بالا می بینید نام لینک Downlowd است، پس در کد شکل زیر و در خط ۱۰، رشته Download به متد ()find_element_by_link_text فرستاده شده است. توجه کنید که دیگر برای ما مقدار خصوصیت های id یا class یا name تگ a مهم نیست، بلکه از نام آن برای دسترسی به آن استفاده کرده ایم. بنابراین یکی دیگر از روش ها، استفاده از نام لینک برای دسترسی به تگ a مورد نظر است.

در خط ۱۲ و ۱۴ به ترتیب نخست بوسیله متد ()get_attribute، خصوصیت href که حاوی آدرس لینک Download است بدست می آید و سپس بوسیله متد ()click به صورت خودکار روی آن کلیک می شود. توجه این دو متد بوسیله متغیر element قابا دسترسی هستند که خود متغیر element خروجی متد ()find_element_by_text_link را نگهداری می کند. پس از آنکه متد ()click با موفقیت اجرا شود، پس خواهید دید که وارد لینک صفحه جدید خواهید شد که همان صفحه دانلود سایت python.org است.

در سه خط پایانی می خواهیم داده ای (در اینجا رشته web scraping) را به فرم جستجوی درون صفحه های سایت python.org بفرستیم، پس همانند مطلب پیشین نخست باید به فیلد (تگ input) فرم جستجو دسترسی پیدا کنیم، پس در این مطلب باید بوسیله شناسه آن، یعنی id-search-field نخست تگ input را انتخاب کرده و سپس داده را بوسیله متد ()send_keys فرستاده و در نهایت بوسیله RETURN از کلاس Keys، به صورت خودکار و همانند سازی شده، کلید Enter یا همان Return فشرده شود تا در صفحه ای تازه، نتیجه جستجو نمایش داده شود.

دانلود سورس برنامه های این مطلب Selenium Python Find Elements