وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

شروع کار با سلنیوم و پایتون

0 275
زمان لازم برای مطالعه: 6 دقیقه


معرفی

اتوماسیون مرورگر وب در حال افزایش محبوبیت است و چارچوب ها/ابزارهای زیادی برای ارائه خدمات اتوماسیون به توسعه دهندگان به وجود آمده اند.

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

در واقع، کاری که با اتوماسیون انجام می‌دهید به شما بستگی دارد، اما فقط مطمئن شوید که کاری که انجام می‌دهید قانونی است، زیرا «ربات‌های» ایجاد شده با ابزارهای اتوماسیون اغلب می‌توانند قوانین یا شرایط خدمات یک سایت را نقض کنند.

سلنیوم یکی از ابزارهای پرکاربردی است که برای اتوماسیون مرورگر وب مورد استفاده قرار می گیرد و عملکرد و قدرت زیادی را بر روی مرورگر ارائه می دهد.

این برنامه از بسیاری از زبان ها مانند C#، Java، Perl، PHP و Ruby، اگرچه به خاطر این آموزش، از آن با پایتون استفاده خواهیم کرد روی پنجره ها.

سلنیوم چیست؟

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

برای مبارزه با «ربات‌ها»، که برای تکثیر انسان‌ها طراحی شده‌اند، بسیاری از سیستم‌های پیچیده برای تشخیص رفتار انسان‌مانند استفاده می‌شوند که تکرار آن با استفاده از ابزارهای برنامه‌نویسی غیرممکن است.

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

برخی از محبوب‌ترین کارهایی که با سلنیوم انجام می‌شوند عبارتند از، اما به موارد زیر محدود نمی‌شوند:

  • کلیک کردن روی دکمه ها
  • در حال وارد کردن متن
  • استخراج متن
  • دسترسی به کوکی ها
  • فشار دادن کلیدها

پیش نیازها

قبل از شروع، برای راه اندازی باید چند کار را انجام دهیم:

  • گوگل کروم را نصب کنید روی کامپیوتر شما – ما یک کاربر را شبیه سازی خواهیم کرد روی گوگل کروم، اگرچه می توانید مرورگرهای دیگر را شبیه سازی کنید، اما برای این مقاله از گوگل کروم استفاده خواهم کرد.
  • گرفتن chromedriver.exe، زیرا برای شبیه سازی واقعی مرورگر به یک مسیر برای این فایل اجرایی نیاز دارید روی کامپیوتر شما.
  • را نصب کنید بسته سلنیوم استفاده کردن pip install selenium روی خط فرمان

اصول اولیه

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

from selenium import webdriver

EXE_PATH = r'path\to\chromedriver.exe'
driver = webdriver.Chrome(executable_path=EXE_PATH)
driver.get('https://google.com')

با اجرای آن، گوگل کروم باز می شود و به آن هدایت می شود https://google.com.

در اینجا، مهم است که توجه داشته باشید که اتصال به وب page ساخته شده است با get(URL) عملکرد از driver هدف – شی.

همانطور که ممکن است متوجه شده باشید، driver سلنیوم است WebDriver شی، از آن برای دسترسی برنامه نویسی به مرورگر استفاده می کنید، به عنوان مثال:

print(driver.page_source)

کد بالا کد HTML منبع کل را چاپ می کند page. اگر نیاز به جمع آوری داده دارید، این بسیار مفید است.

مکان یابی عناصر

معمولاً به محتویات یک کل نیازی ندارید page، بلکه عناصر خاص است.

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

این بدان معناست که اگر به محتویات یک عنصر خاص نیاز دارید page، برای دریافت شناسه برچسب ها می توانید کارهای زیر را انجام دهید (در یک جلسه معمولی Google Chrome):

  • کلیک راست روی عنصر
  • “بازرسی” را انتخاب کنید
  • و در پنجره جدید می توانید نگاهی به HTML عنصر بیندازید و ID بعد از آن خواهد بود id=.

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

دریافت عناصر با شناسه

اگر شناسه دقیق عنصر مورد نظر خود را دارید، بازیابی آن آسان است:

element = driver.find_element_by_id('element_id')

دریافت عناصر بر اساس نام

مشابه روش قبلی:

element = driver.find_element_by_name('element_name')

دریافت عناصر بر اساس کلاس

و دوباره، مشابه روش قبلی:

element = driver.find_element_by_class_name('element_class_name')

دریافت عناصر توسط تگ HTML

در برخی موارد، ممکن است بخواهید همه عناصر را با یک برچسب خاص دریافت کنید:

links = driver.find_elements_by_tag_name('a')

در این مورد، links پر از همه است a برچسب ها، که اکنون شامل هر پیوند در page. این می تواند برای اهداف خزیدن وب مفید باشد.

دریافت عناصر توسط XPath

همه عناصر دارای شناسه نیستند، یا شاید شما نمی خواهید به همه آنها دسترسی داشته باشید a تگ HTML. راه های دیگری برای بازیابی یک عنصر بسیار خاص وجود دارد، مانند XPath، که راه دیگری برای بازیابی عناصر است. با XPath، می توانید عناصر را راحت تر و کارآمدتر پیدا کنید:

tag_list = driver.find_elements_by_xpath("//tag(@attr='val')")

tag_list اکنون شامل هر کدام است tag که دارد و صفت attr تنظیم کنید val:

<tag attr='val'>Foo</tag>

اکنون می توانید تکرار کنید tag_listو با هر سلنیوم تعامل داشته باشید WebElement در آن

می توانید در مورد سیستم XPath در سلنیوم بیشتر بخوانید اینجا.

سلنیوم WebElement

یک سلنیوم WebElement عملا یک عنصر HTML را نشان می دهد. می توانید عملیات را انجام دهید روی این عناصر شبیه به روش انجام آن به عنوان یک کاربر نهایی هستند.

این عملیات عبارتند از:

  • دسترسی به خصوصیات ساده عنصر، مانند متن داخل (element.text)
  • دسترسی به عناصر والد، که آنها نیز از نوع هستند WebElement (element.parent)
  • دسترسی به ویژگی های خاص، مانند href از یک a برچسب (element.get_attribute('href'))
  • جستجو در آن (همان روشی که در آن جستجو می کنید driver)
  • کلیک کردن روی آن (element.click())
  • در صورت امکان متن را وارد کنید (element.send_keys(‘Input Text'))

سلنیوم وب درایور

WebDriver شبیه است به WebElementبا این حال، تفاوت اصلی دامنه آنها است. دامنه دومی خود عنصر است، در حالی که دامنه اولی کل است page.

با سلنیوم می توانید کارهای زیادی انجام دهید WebDriver همچنین، عملاً هر کاری را که می توانید به عنوان یک انسان با یک مرورگر معمولی انجام دهید.

برخی از موارد بسیار مفید دیگر عبارتند از:

  • اجرای جاوا اسکریپت: driver.execute_script("script")
  • ذخیره اسکرین شات: driver.save_screenshot('image.png')
  • در “حالت بدون سر”، که در آن مرورگر با رندر نکردن، در زمان صرفه جویی می کند page:
from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(executable_path=EXE_PATH, chrome_options=options)
driver.set_window_size(1440, 900)

توجه داشته باشید که اندازه پنجره روی تنظیم شده است (1440, 900)، یعنی جلوگیری از انواع اشکالات مربوط به عدم بارگیری صحیح برخی از عناصر به دلیل حالت بدون سر.

می‌توانید رزولوشن را به هر رزولوشن نسبتاً بزرگ دیگری تغییر دهید، اما هنگام رفتن به حالت بدون هد باید مطمئن شوید که رزولوشن از حالت پیش‌فرض تغییر می‌کند.

دسترسی به کوکی ها

ممکن است نیاز به اضافه کردن یا حذف کردن داشته باشید کوکی های مرورگر:

ck = {'some_attr': 'foo', 'some_other_attr': 'bar'}
driver.add_cookie(ck)

این یک کوکی به مرورگر اضافه می‌کند، که برای مثال اگر نیاز به افزودن احراز هویت یا کوکی‌های ترجیحی دارید، می‌تواند مفید باشد. مهم است که مطمئن شوید که کوکی داخل است dict قالب

همچنین بازیابی کوکی ها از مرورگر بسیار آسان است:

cookies = driver.get_cookies()
for ck in cookies:
    print(ck)

کد بالا هر کوکی را در مرورگر چاپ می کند.

تغییر HTML

گاهی اوقات ممکن است نیاز به تغییر ویژگی یک عنصر خاص پیدا کنید.

همانطور که قبلا ذکر شد، می توانید از سلنیوم استفاده کنید WebDriver برای اجرای جاوا اسکریپت و تغییر خصوصیات عناصر اتفاقاً با جاوا اسکریپت بسیار آسان است:

driver.execute_script("arguments(0).setAttribute('attr','value')", element)

اینجا element عنصری برای تغییر است، attr صفت تغییر است و value ارزش جدید است.

گاهی اوقات ممکن است لازم باشد یک فایل را از یک وب سایت دانلود کنید:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_experimental_option("prefs", {
    "download.default_directory": r"path\to\directory",
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})

driver = webdriver.Chrome(executable_path=EXE_PATH, chrome_options=options)

با تعریف می توانید مسیر محل ذخیره را مشخص کنید download.default_directory، مانند path\to\directory.

فشار دادن کلیدها

import time
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys

action = ActionChains(driver)
for _ in range(3):
    action.send_keys(Keys.ARROW_DOWN)
    time.sleep(.1)
action.perform()

این کد فلش رو به پایین (Keys.ARROW_DOWN) 3 بار بعد از هر action.send_keys(Keys.ARROW_DOWN) برنامه کمی صبر می کند. این برای اطمینان از ثبت همه کلیدها توصیه می شود.

اگر ما به سادگی چندین دستور را اجرا کنیم، ممکن است در آن گم شوند process و در واقع ثبت نام نمی کند.

Keys شامل تمام کلیدها روی صفحه کلید، به این معنی که می توانید از این روش برای تب (Keys.TAB) بین عناصر روی را page تعامل با آن را آسان تر می کند (Keys.RETURN و Keys.SPACE نیز بسیار مهم هستند).

کلیک کردن روی دکمه ها

توجه داشته باشید که می توانید از فشار دادن کلید برای پیمایش بین عناصر در a استفاده کنید pageبرای مثال می‌توانید از Tabs و Spaces برای پر کردن کادرها استفاده کنید و از کلیدهای جهت‌نما برای پیمایش بین آیتم‌های منوی کشویی استفاده کنید.

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

checkbox = driver.find_element_by_id('checkbox')
checkbox.click()

وارد کردن فرم ها

شما همچنین می توانید فشار دادن کلیدها را در خود عناصر شبیه سازی کنید:

element.send_keys(Keys.CONTROL, 'a')
element.send_keys(value)

به این ترتیب، کلیدها در داخل ثبت می شوند element، به طوری که اگر می خواهید یک را پر کنید textarea، شما می توانید این کار را انجام دهید.

به هر حال، این کد از یک میانبر صفحه کلید (CTRL + A) برای انتخاب تمام متن های داخل عنصر استفاده می کند. خط بعدی متن انتخاب شده را جایگزین می کند value وارد شد.

برای ثبت میانبرهای صفحه کلید، تمام کلیدهای مورد نظر در پارامترها را به آن پاس دهید send_keys.

پیمایش

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

driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")

کد بالا از دستور جاوا اسکریپت برای اسکرول کردن به پایین استفاده می کند page، اکنون می توانید استفاده کنید driver.page_source دوباره و مطالب جدید را دریافت کنید.

نتیجه

سلنیوم یکی از ابزارهای پرکاربردی است که برای اتوماسیون مرورگر وب مورد استفاده قرار می گیرد و عملکرد و قدرت زیادی را بر روی مرورگرهای کنترل شده توسط انسان ارائه می دهد.

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

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-23 20:08:06

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید