از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
شروع کار با سلنیوم و پایتون
سرفصلهای مطلب
معرفی
اتوماسیون مرورگر وب در حال افزایش محبوبیت است و چارچوب ها/ابزارهای زیادی برای ارائه خدمات اتوماسیون به توسعه دهندگان به وجود آمده اند.
اتوماسیون مرورگر وب اغلب برای اهداف آزمایشی در محیطهای توسعه و تولید استفاده میشود، اگرچه اغلب برای استخراج دادههای وب از منابع عمومی، تجزیه و تحلیل و پردازش دادهها نیز استفاده میشود.
در واقع، کاری که با اتوماسیون انجام میدهید به شما بستگی دارد، اما فقط مطمئن شوید که کاری که انجام میدهید قانونی است، زیرا «رباتهای» ایجاد شده با ابزارهای اتوماسیون اغلب میتوانند قوانین یا شرایط خدمات یک سایت را نقض کنند.
سلنیوم یکی از ابزارهای پرکاربردی است که برای اتوماسیون مرورگر وب مورد استفاده قرار می گیرد و عملکرد و قدرت زیادی را بر روی مرورگر ارائه می دهد.
این برنامه از بسیاری از زبان ها مانند 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