Рубрики
Без рубрики

Как Сделать Скриншот С Помощью Python & Selenium?

Этот учебник поможет вам использовать Selenium и Python для захвата скриншотов Python Selenium и проверки того, как ваш сайт отображается в разных браузерах.

Автор оригинала: Nishant Choudhary.

Программный фреймворк goto для любого веб-разработчика, ищущего бесплатный инструмент автоматизации тестирования с открытым исходным кодом, – это Selenium. Он используется с различными языками программирования, включая Java, Python, PHP, Perl и C#. Selenium также можно использовать в качестве инструмента веб-скребка или для создания робота-реплики человека для автоматизации социальных сетей или даже тестирования PDF-файлов ! Гики в Google & Thoughtworks высоко ценятся за его разработку и обслуживание.

В этом уроке по скриншотам Python Selenium мы рассмотрим различные способы создания скриншотов с помощью привязок Python Selenium. Прежде чем перейти к захвату скриншотов Python Selenium, давайте сначала познакомимся с привязками Selenium Python.

Что Такое Привязки Selenium Python?

Selenium имеет различные компоненты; у нас есть Selenium WebDriver, Selenium IDE и Selenium Grid. Selenium Python bindings-это API-интерфейс для использования Python с Selenium WebDriver для написания функциональных/приемочных тестов. Мы будем использовать эти привязки Python для Selenium для захвата полностраничных скриншотов, скриншотов HTML-элементов и сохранения их в нужном нам месте.

Установка зависимостей

Прежде чем мы научимся использовать Selenium Python для создания скриншотов, нам нужно установить некоторые зависимости. Ниже приведен список всего, что вам нужно в вашей машине-

  • Питон
  • Зернышко
  • Привязки Selenium Python
  • Водитель Геккона
  • ХромедРайвер
  1. Чтобы научиться использовать Selenium Python, у вас должен быть установлен Python & pip в вашей системе или на сервере. Python поставляется с предустановленными системами Linux и Mac. Для Windows вы можете скачать установщик Python из здесь .

Примечание: Python 2 теперь избыточен. Поэтому, если ваша система Linux или Mac имеет более старую версию, вы можете рассмотреть возможность обновления их до последних стабильных версий.

Питон
  1. Pip-это инструмент или менеджер пакетов для Python, и он поставляется с предустановленными последними версиями (как вы можете видеть на рисунке выше). Вы можете проверить, существует ли он в вашей системе, выполнив следующую команду в командной строке-

пип помогите

Если вы получите ответ, как показано ниже, от пипа, вы можете идти.

Если он показывает что-то вроде этого-

Тогда вы должны скачать это get-pip.py file в любое место в вашей системе, но у вас должен быть путь к файлу. Помните, что вы должны сделать это только в том случае, если pip не установлен в вашей системе.

Затем выполните эту команду, чтобы установить pip.

питон get-pip.py

Если вы находитесь не в том каталоге, в котором находится загруженный файл, замените имя файла в приведенной выше команде полным путем к файлу.

Теперь попробуйте снова выполнить команду pip help, вы должны увидеть экран, которым мы поделились ранее.

  1. Далее мы устанавливаем привязки Selenium Python с помощью pip. Затем вам нужно будет выполнить эту команду-

pip install selenium

Это устанавливает привязки Selenium Python в вашей системе. В качестве альтернативы, если вам не нравится этот механизм установки, вы можете сначала загрузить исходный дистрибутив Selenium-Python из Pypi . Разархивируйте его. Как только вы это сделаете, выполните следующую команду, чтобы установить привязки –

питон setup.py установка

Опять же, помните, что вам это нужно только в том случае, если вы не хотите устанавливать программу с помощью pip. Кроме того, если вы не находитесь в той же папке, где вы заархивировали загруженные привязки Selenium Python, то замените их setup.py с полным путем к setup.py.

  1. Далее нам нужен драйвер, чтобы перейти к щелчку скриншотов веб-страниц Python Selenium.

Вы можете выбрать любой браузер по вашему выбору, и вы можете скачать драйверы по следующим ссылкам:

Теперь давайте сделаем пробный файл с именем check_setup.py. Напишите в нем следующий код –

from selenium import webdriver browser = webdriver.Firefox() browser.get("https://www.lambdatest.com/") 

Это должно запустить экземпляр Firefox и автоматически загрузить домашнюю страницу лямбда-теста. Если это сработало для вас, мы все готовы захватить скриншоты Python Selenium веб-сайтов.

Захват Скриншотов С Помощью Python и Selenium

Я надеюсь, что теперь, когда у вас установлены все зависимости и вы знаете, как использовать Selenium Python, пришло время перейти к хорошей части. В этом разделе мы увидим, как сделать скриншот Python Selenium для любой веб-страницы. Мы увидим примеры как для драйвера Gecko, так и для ChromeDriver. Во-первых, давайте посмотрим, как использовать Selenium Python с драйвером Gecko или Selenium FirefoxDriver.

Использование get_screenshot_as_file() с драйвером Gecko Для Скриншотов Python Selenium

from selenium import webdriver 
from time import sleep 
browser = webdriver.Firefox() 
browser.get("https://www.lambdatest.com/") 
sleep(1) 
browser.get_screenshot_as_file("LambdaTestVisibleScreen.png") 
browser.quit() 

Если вы хотите сохранить эти изображения в определенном месте, отличном от каталога проекта, пожалуйста, укажите полный путь в качестве аргумента get_screenshot_as_file.

Пошаговое руководство по коду:

Давайте разберемся, что мы здесь делаем.

из selenium import webdriver – Эта строка импортирует WebDriver, который мы используем для запуска экземпляра браузера и использования API для взаимодействия с веб-элементами.

from time import sleep – Эта строка импортирует функцию sleep из модуля Python ‘time’. Он принимает целочисленные аргументы, которые равны числу секунд. Скрипт ожидает заданное количество секунд, прежде чем выполнить следующую строку кода.

браузер.Firefox() – Эта строка эквивалентна тому, чтобы сказать: используйте ключевое слово “браузер” так же, как вы использовали бы “webdriver”.Firefox()’.

browser.get("https://www.lambdatest.com/")

Это запускает экземпляр Firefox, управляемый драйвером Selenium, и извлекает URL-адрес, указанный в качестве аргумента функции get(argument).

sleep(1) – Это останавливает выполнение скрипта на 1 секунду. Этот шаг часто требуется, когда на странице есть анимация или когда вы явно хотите подождать некоторое время, чтобы выполнить некоторые действия или полностью загрузить страницы.

Примечание: Selenium WebDriver по умолчанию ожидает полной загрузки страницы перед выполнением следующей строки скрипта или операции. Но на некоторых продвинутых веб-сайтах с визуализацией JavaScript нам может понадобиться использовать ” сон ” для ручной приостановки скрипта на некоторое время, чтобы анимация и сама страница были полностью загружены.

browser.get_screenshot_as_file("LambdaTestVisibleScreen.png") 

Это, наконец, щелкает видимый раздел веб-страницы в запущенном экземпляре Firefox и сохраняет скриншот с указанным именем и расширением.

browser.quit() – Наконец, браузер должен быть закрыт, и эта строка делает то же самое.

Использование save_screenshot() с драйвером Gecko Для Скриншотов Python Selenium

Это самый простой способ сохранить полный скриншот страницы. Просто замените команду get_screenshot_as_file на save_screenshot, как показано ниже-

browser.get_screenshot_as_file("LambdaTestVisibleScreen.png") 

становится

driver.save_screenshot('your_desired_filename.png') 

Далее мы увидим, как использовать Selenium Python для захвата скриншотов с помощью Selenium ChromeDriver.

Использование screenshot() С ChromeDriver Для Скриншотов Python Selenium

Функция save_screenshot работает с ChromeDriver, но чтобы предложить альтернативное решение, мы также покажем вам, как использовать функцию скриншота для создания полностраничного скриншота. Вот сценарий-

from selenium import webdriver 
from time import sleep 
from selenium.webdriver import ChromeOptions 
options = ChromeOptions() 
options.headless = True 
browser = webdriver.Chrome(chrome_options=options) 
URI = "https://www.lambdatest.com/" 
browser.get(URI) 
sleep(1)
S = lambda X: browser.execute_script('return document.body.parentNode.scroll'+X) browser.set_window_size(S('width'), S('height')) 
browser.find_element_by_tag_name('body').screenshot('LambdaTestFullPage.png') browser.quit() 

Пошаговое руководство по коду:

Давайте разберемся, что мы здесь делаем. Прежде всего, в этом примере мы используем ChromeDriver. Ранее мы использовали драйвер Gecko для использования Firefox в качестве браузера. Более или менее, остальные функции те же.

from selenium.webdriver import ChromeOptions

Мы импортируем параметры Chrome, чтобы установить браузер как безголовый, чтобы он работал в фоновом режиме. Мы могли бы напрямую использовать webdriver.Chrome Options, но чтобы сделать его более понятным, мы разделили его на отдельную строку кода.

options = ChromeOptions() 
options.headless = True 
browser = webdriver.Chrome(chrome_options=options) 
URI = "https://www.lambdatest.com/" 
browser.get(URI) 

Здесь мы используем недавно установленные параметры Chrome и передаем их в качестве параметра функции webdriver Chrome. Обратите внимание, ранее мы использовали ” Firefox()”. “”Browser.get” запускает экземпляр и извлекает URL-адрес.

S = lambda X: browser.execute_script('return document.body.parentNode.scroll'+X) browser.set_window_size(S('width'), S('height')) 

Первая строка-это лямбда – функция для нахождения значения X. Мы получаем значение, выполняя функции DOM JavaScript. Вторая строка предназначена для изменения размера окна.

browser.find_element_by_tag_name('body').screenshot('lambdaTestFullPage.png') browser.quit() 

Наконец, мы отслеживаем элемент body веб-страницы с помощью функции драйвера find_element_by_tag_name и передаем “body” в качестве параметра. Вы также можете использовать find_element_by_id, find_element_by_xpath для поиска элемента. Мы использовали вложенную функцию screenshot() оператора ‘.’ в той же строке, чтобы захватить полный скриншот страницы. Наконец, мы завершаем работу экземпляра Chrome с помощью browser.quit() .

Захват Скриншотов Python Selenium Конкретного Элемента

Теперь мы покажем, как мы можем использовать функцию save_screenshot() для захвата любого элемента на странице, скажем, кнопки, изображения или формы, чего угодно. Мы будем использовать библиотеку PIL Python, которая позволяет нам выполнять операции с изображениями.

Мы захватим элемент feature “section” на веб – сайте Lambda Test со следующим XPath – “//section[contains(string(),’START SCREENSHOT TESTING’)]”

Окончательный сценарий будет:

from selenium import webdriver 
from time import sleep 
from PIL import Image 
browser = webdriver.Chrome() 
browser.get("https://www.lambdatest.com/feature") 
sleep(1) 
featureElement = browser.find_element_by_xpath("//section[contains(string(),'START SCREENSHOT TESTING')]") 
location = featureElement .location 
size = featureElement .size 
browser.save_screenshot("fullPageScreenshot.png") 
x = location['x'] 
y = location['y'] 
w = x + size['width'] 
h = y + size['height'] 
fullImg = Image.open("fullPageScreenshot.png") 
cropImg = fullImg.crop(x, y, w, h) 
cropImg.save('cropImage.png') 
browser.quit()  

Этот скрипт при выполнении сохранит обрезанный элемент into-с сайта лямбда-теста в виде crop Image.png.

Пошаговое руководство по коду:

из PIL import Image

Эта строка импортирует модуль изображения из библиотеки PIL Python.

featureElement = browser.find_element_by_xpath("//section[contains(string(),'START SCREENSHOT TESTING')]")

Эта строка содержит одну из функций на веб-сайте Lambda Test с использованием XPath (как вы можете видеть ниже.)

location = featureElement .location 
size = featureElement .size 

Первая строка извлекает вертикальное и горизонтальное начальное местоположение элемента объекта. Вторая строка получает ширину и высоту элемента.

Мы храним их в переменных ‘x’, ‘y’, ‘w’, ‘h’ соответственно.

fullImg = Image.open("fullPageScreenshot.png") 
cropImg = fullImg.crop(x, y, w, h) 
cropImg.save('cropImage.png')

Сначала мы открываем изображение и сохраняем байты в переменной “full Img”. Затем мы обрезаем его,используя рассчитанные нами параметры x,y,w, h.

Наконец, мы сохраняем обрезанное изображение.

Это должен быть вывод, который вы увидите после успешного выполнения кода-

Какую Роль Скриншоты Играют В Автоматизации Тестирования?

Автоматизированные скриншоты могли бы помочь в легком выявлении ошибок и быстрее сделать все это вручную. Самое главное, что он может быть таким же масштабируемым, как и тестируемое приложение, не требуя дополнительных тестировщиков. Прямым следствием всего вышесказанного является то, что автоматизированные скриншоты являются экономически эффективным и экономичным по времени процессом.

Дополнительно,

  • Это всегда лучшая альтернатива ручному открытию веб-сайтов в разных браузерах и сохранению изображений.
  • Для адаптивных приложений, которые должны работать на разных устройствах и иметь много различных тематических страниц и компонентов, делать скриншоты имеет смысл.

Другие Варианты Получения Скриншотов Python Selenium

Если вы предпочитаете использовать другие способы захвата скриншотов Python Selenium, вы также можете использовать эту библиотеку для создания скриншотов. Для его установки выполните следующую команду.

pip install Selenium-Скриншот

Пример захвата полностраничного скриншота:

from Screenshot import Screenshot_Clipping 
from selenium import webdriver
ob=Screenshot_Clipping.Screenshot() 
driver = webdriver.Chrome() 
url = "https://www.google.com" 
driver.get(url) 
img_url=ob.full_Screenshot(driver, save_path=r'.', image_name='google.png') 
driver.quit() 

Почему Selenium И Python Хорошо Подходят Для Захвата Скриншотов?

Selenium и Python-это выбор, когда дело доходит до Selenium test automation . И это не ограничивается только захватом скриншотов, вы можете сделать гораздо больше, используя эту потрясающую комбинацию. Давайте выясним почему-

  • Кривая обучения очень мала для привязок Selenium Python, так как сам язык очень прост и интуитивно понятен для начала.
  • Мы можем использовать его с несколькими браузерами, включая популярные.
  • Количество строк кода, которое вам нужно написать на Python, намного меньше, чем на других языках.
  • Сильная поддержка сообщества.
  • Более быстрое и эффективное выполнение.

Закругляйся!

В этом уроке мы узнали об использовании Selenium и Python для захвата скриншотов веб – страниц. Это, по сути, лучший способ эффективно ловить ошибки и экономить вашей команде много времени. Лучший способ выполнить кроссбраузерное тестирование – это сравнить, как веб-страницы отображаются в нескольких браузерах или устройствах.

Вы можете использовать облачную платформу, такую как LambdaTest, для захвата скриншотов вашего сайта или конкретной веб-страницы, не утруждая себя написанием кода. Вы можете сделать это в более чем 2000 браузерах и операционных системах через облако Selenium Grid. Мы надеемся, что эти инструменты пригодятся вам, когда вы не в настроении писать весь этот код, а просто хотите поохотиться на некоторые ошибки!

Если у вас есть какие-либо проблемы или вопросы, не стесняйтесь обращаться к нам через раздел комментариев. Счастливого испытания!