Селен

Введение в Selenium в Python 3

Введение в Selenium в Python 3
Selenium - это фреймворк, используемый для тестирования веб-приложений. Selenium автоматизирует браузер, такой как Chrome или Firefox, для запуска тестов на желаемом веб-сайте. Selenium также является очень мощным инструментом для очистки веб-страниц. Selenium поддерживает JavaScript и все современные функции браузера. Этот инструмент очень эффективен при извлечении информации с веб-сайтов.

Эта статья покажет вам, как настроить Selenium в вашем дистрибутиве Linux (i.е., Ubuntu), а также о том, как выполнять базовую веб-автоматизацию и удаление веб-страниц с помощью библиотеки Selenium Python 3.

Предпосылки

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

1) Дистрибутив Linux (желательно Ubuntu), установленный на вашем компьютере.
2) Python 3 установлен на вашем компьютере.
3) PIP 3 установлен на вашем компьютере.
4) Веб-браузер Google Chrome или Firefox, установленный на вашем компьютере.

Вы можете найти множество статей по этим темам на LinuxHint.ком. Обязательно ознакомьтесь с этими статьями, если вам понадобится дополнительная помощь.

Подготовка виртуальной среды Python 3 для проекта

Виртуальная среда Python используется для создания изолированного каталога проекта Python. Модули Python, которые вы устанавливаете с помощью PIP, будут установлены только в каталоге проекта, а не глобально.

Питон virtualenv модуль используется для управления виртуальными средами Python.

Вы можете установить Python virtualenv модуль глобально с использованием PIP 3, а именно:

$ sudo pip3 установить virtualenv

PIP3 загрузит и глобально установит все необходимые модули.

На этом этапе Python virtualenv модуль должен быть установлен глобально.

Создайте каталог проекта питон-селен-основной / в вашем текущем рабочем каталоге, как показано ниже:

$ mkdir -pv python-selenium-basic / драйверы

Перейдите в каталог только что созданного проекта питон-селен-основной /, следующим образом:

$ cd python-селен-базовый /

Создайте виртуальную среду Python в каталоге вашего проекта с помощью следующей команды:

$ virtualenv .env

Виртуальная среда Python теперь должна быть создана в каталоге вашего проекта.'

Активируйте виртуальную среду Python в каталоге вашего проекта с помощью следующей команды:

$ источник .env / bin / активировать

Как видите, виртуальная среда Python активирована для этого каталога проекта.

Установка библиотеки Selenium Python

Библиотека Selenium Python доступна в официальном репозитории Python PyPI.

Вы можете установить эту библиотеку с помощью PIP 3 следующим образом:

$ pip3 установить селен

Библиотека Selenium Python теперь должна быть установлена.

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

Установка драйвера Firefox Gecko

Драйвер Firefox Gecko позволяет вам управлять или автоматизировать веб-браузер Firefox с помощью Selenium.

Чтобы загрузить драйвер Firefox Gecko, посетите страницу выпусков Mozilla / geckodriver на GitHub в веб-браузере.

Как видите, v0.26 год.0 - последняя версия драйвера Firefox Gecko на момент написания этой статьи.

Чтобы загрузить драйвер Firefox Gecko, прокрутите немного вниз и щелкните файл Linux geckodriver tar.gz архив, в зависимости от архитектуры вашей операционной системы.

Если вы используете 32-разрядную операционную систему, щелкните значок geckodriver-v0.26 год.0-linux32.деготь.gz ссылка на сайт.

Если вы используете 64-битную операционную систему, щелкните значок geckodriver-v0.26 год.0-linuxx64.деготь.gz ссылка на сайт.

В моем случае я скачаю 64-битную версию драйвера Firefox Gecko.

Ваш браузер должен предложить вам сохранить архив. Выбирать Сохранить файл а затем щелкните ОК.

Архив с драйверами Firefox Gecko необходимо скачать в папке ~ / Загрузки каталог.

Извлеките geckodriver-v0.26 год.0-linux64.деготь.gz архив из ~ / Загрузки каталог в драйверы / каталог вашего проекта, введя следующую команду:

$ tar -xzf ~ / Загрузки / geckodriver-v0.26 год.0-linux64.деготь.gz -C драйверы /

После извлечения архива драйвера Firefox Gecko новый геккодрайвер бинарный файл должен быть создан в драйверы / каталог вашего проекта, как вы можете видеть на скриншоте ниже.

Тестирование драйвера Selenium Firefox Gecko

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

Сначала откройте каталог проекта питон-селен-основной / с вашей любимой IDE или редактором. В этой статье я буду использовать код Visual Studio.

Создайте новый скрипт Python ex01.ру, и введите следующие строки в скрипт.

из selenium import webdriver
из селена.webdriver.общий.ключи импорт Ключи
от времени импортный сон
браузер = веб-драйвер.Firefox (исполняемый_путь = "./ drivers / geckodriver ")
браузер.get ('http: // www.Google.com ')
сон (5)
браузер.покидать()

Как только вы закончите, сохраните ex01.ру Скрипт Python.

Я объясню код в следующем разделе этой статьи.

Следующая строка настраивает Selenium для использования драйвера Firefox Gecko из драйверы / каталог вашего проекта.

Чтобы проверить, работает ли драйвер Firefox Gecko с Selenium, запустите следующее ex01.ру Скрипт Python:

$ python3 ex01.ру

Веб-браузер Firefox должен автоматически посещать Google.com и закрывается через 5 секунд. Если это происходит, значит, драйвер Selenium Firefox Gecko работает правильно.

Установка веб-драйвера Chrome

Веб-драйвер Chrome позволяет управлять или автоматизировать веб-браузер Google Chrome с помощью Selenium.

Вы должны загрузить ту же версию веб-драйвера Chrome, что и ваш веб-браузер Google Chrome.

Чтобы узнать номер версии своего веб-браузера Google Chrome, посетите страницу chrome: // settings / help в Google Chrome. Номер версии должен быть в О Chrome раздел, как вы можете видеть на скриншоте ниже.

В моем случае номер версии 83.0.4103.116. Первые три части номера версии (83.0.4103, в моем случае) должны соответствовать первым трем частям номера версии веб-драйвера Chrome.

Чтобы загрузить веб-драйвер Chrome, посетите официальную страницу загрузки драйвера Chrome.

в Текущие выпуски будет доступен веб-драйвер Chrome для самых последних выпусков веб-браузера Google Chrome, как вы можете видеть на снимке экрана ниже.

Если используемая вами версия Google Chrome отсутствует в Текущие выпуски раздел, прокрутите немного вниз, и вы должны найти желаемую версию.

После того, как вы выберете правильную версию веб-драйвера Chrome, откроется следующая страница. Нажми на chromedriver_linux64.застегивать ссылка, как показано на скриншоте ниже.

Теперь необходимо загрузить архив веб-драйвера Chrome.

Архив веб-драйвера Chrome теперь должен быть загружен в папку ~ / Загрузки каталог.

Вы можете извлечь chromedriver-linux64.застегивать архив из ~ / Загрузки каталог в драйверы / каталог вашего проекта с помощью следующей команды:

$ unzip ~ / Загрузки / chromedriver_linux64.zip -d драйверы /

После извлечения архива веб-драйвера Chrome новый хромированная отвертка бинарный файл должен быть создан в драйверы / каталог вашего проекта, как вы можете видеть на скриншоте ниже.

Тестирование веб-драйвера Selenium Chrome

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

Сначала создайте новый скрипт Python ex02.ру, и введите в скрипт следующие строки кодов.

из selenium import webdriver
из селена.webdriver.общий.ключи импорт Ключи
от времени импортный сон
браузер = веб-драйвер.Chrome (исполняемый_путь = "./ drivers / chromedriver ")
браузер.get ('http: // www.Google.com ')
сон (5)
браузер.покидать()

Как только вы закончите, сохраните ex02.ру Скрипт Python.

Я объясню код в следующем разделе этой статьи.

Следующая строка настраивает Selenium для использования веб-драйвера Chrome из драйверы / каталог вашего проекта.

Чтобы проверить, работает ли веб-драйвер Chrome с Selenium, запустите ex02.ру Скрипт Python, как показано ниже:

$ python3 ex01.ру

Веб-браузер Google Chrome должен автоматически посещать Google.com и закрывается через 5 секунд. Если это происходит, значит, драйвер Selenium Firefox Gecko работает правильно.

Основы веб-парсинга с помощью Selenium

С этого момента я буду использовать веб-браузер Firefox. Вы также можете использовать Chrome, если хотите.

Базовый скрипт Selenium Python должен выглядеть как скрипт, показанный на скриншоте ниже.

Сначала импортируйте селен webdriver от селен модуль.

Затем импортируйте Ключи из селен.webdriver.общий.ключи. Это поможет вам отправлять нажатия клавиш клавиатуры в браузер, который вы автоматизируете, из Selenium.

Следующая строка создает браузер объект для веб-браузера Firefox с помощью драйвера Firefox Gecko (Webdriver). Вы можете управлять действиями браузера Firefox с помощью этого объекта.

Чтобы загрузить веб-сайт или URL (я буду загружать веб-сайт https: // www.утка.com), позвоните в получать() метод браузер объект в вашем браузере Firefox.

Используя Selenium, вы можете писать свои тесты, выполнять парсинг веб-страниц и, наконец, закрывать браузер с помощью покидать() метод браузер объект.

Выше показан базовый макет скрипта Selenium Python. Вы будете писать эти строки во всех своих скриптах Selenium Python.

Пример 1: Печать заголовка веб-страницы

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

Создайте новый файл ex04.ру и введите в него следующие строки кодов.

из selenium import webdriver
из селена.webdriver.общий.ключи импорт Ключи
браузер = веб-драйвер.Firefox (исполняемый_путь = "./ drivers / geckodriver ")
браузер.get ('https: // www.утка.com ')
print ("Заголовок:% s"% browser.заглавие)
браузер.покидать()

Как только вы закончите, сохраните файл.

Здесь браузер.заглавие используется для доступа к заголовку посещенной веб-страницы и Распечатать() функция будет использоваться для печати заголовка в консоли.

После запуска ex04.ру скрипт, он должен:

1) Откройте Firefox
2) Загрузите желаемую веб-страницу
3) Получить заголовок страницы
4) Распечатать заголовок на консоли
5) И, наконец, закройте браузер

Как видите, ex04.ру скрипт красиво распечатал заголовок веб-страницы в консоли.

$ python3 ex04.ру

Пример 2: Печать заголовков нескольких веб-страниц

Как и в предыдущем примере, вы можете использовать тот же метод для печати заголовков нескольких веб-страниц с помощью цикла Python.

Чтобы понять, как это работает, создайте новый скрипт Python ex05.ру и введите в скрипт следующие строки кода:

из selenium import webdriver
из селена.webdriver.общий.ключи импорт Ключи
браузер = веб-драйвер.Firefox (исполняемый_путь = "./ drivers / geckodriver ")
urls = ['https: // www.утка.com ',' https: // linuxhint.com ',' https: // yahoo.com ']
для URL в URL:
браузер.получить (URL)
print ("Заголовок:% s"% browser.заглавие)
браузер.покидать()

Как только вы закончите, сохраните скрипт Python ex05.ру.

Здесь URL-адреса list сохраняет URL-адрес каждой веб-страницы.

А для цикл используется для перебора URL-адреса список пунктов.

На каждой итерации Selenium сообщает браузеру посетить url и получите название веб-страницы. Как только Selenium извлекает заголовок веб-страницы, он печатается в консоли.

Запустите скрипт Python ex05.ру, и вы должны увидеть заголовок каждой веб-страницы в URL-адреса список.

$ python3 ex05.ру

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

Пример 3: Извлечение данных с веб-страницы

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

Сначала посетите случайный.ссылка org из Firefox. Страница должна генерировать случайную строку, как вы можете видеть на скриншоте ниже.

Чтобы извлечь случайные строковые данные с помощью Selenium, вы также должны знать представление данных в формате HTML.

Чтобы увидеть, как случайные строковые данные представлены в HTML, выберите случайные строковые данные, нажмите правую кнопку мыши (ПКМ) и нажмите Осмотрите элемент (Q), как показано на скриншоте ниже.

HTML-представление данных должно отображаться в Инспектор вкладка, как вы можете видеть на скриншоте ниже.

Вы также можете нажать на Значок проверки ( ) для проверки данных со страницы.

Щелкните значок проверки () и наведите указатель мыши на случайные строковые данные, которые вы хотите извлечь. HTML-представление данных должно отображаться, как и раньше.

Как видите, случайные строковые данные обернуты в HTML предварительно тег и содержит класс данные.

Теперь, когда мы знаем HTML-представление данных, которые хотим извлечь, мы создадим скрипт Python для извлечения данных с помощью Selenium.

Создайте новый скрипт Python ex06.ру и введите в скрипт следующие строки кодов

из selenium import webdriver
из селена.webdriver.общий.ключи импорт Ключи
браузер = веб-драйвер.Firefox (исполняемый_путь = "./ drivers / geckodriver ")
браузер.get ("https: // www.случайный.org / strings /?число = 1 & len = 20 & цифр
= on & upperalpha = on & loweralpha = on & unique = on & format = html & rnd = new ")
dataElement = браузер.find_element_by_css_selector ('предварительно.данные')
печать (элемент данных.текст)
браузер.покидать()

Как только вы закончите, сохраните ex06.ру Скрипт Python.

Здесь браузер.получать() метод загружает веб-страницу в браузере Firefox.

В браузер.find_element_by_css_selector () ищет в HTML-коде страницы определенный элемент и возвращает его.

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

Ниже предварительно.данные элемент был сохранен в dataElement Переменная.

Затем сценарий печатает текстовое содержимое выбранных предварительно.данные элемент.

Если вы запустите ex06.ру Скрипт Python, он должен извлекать случайные строковые данные с веб-страницы, как вы можете видеть на скриншоте ниже.

$ python3 ex06.ру

Как видите, каждый раз, когда я запускаю ex06.ру Скрипт Python, он извлекает разные случайные строковые данные с веб-страницы.

Пример 4: Извлечение списка данных с веб-страницы

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

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

Если вы внимательно изучите список имен, вы увидите, что это упорядоченный список (ол тег). В ол тег также включает имя класса список имен. Каждое из случайных имен представлено в виде элемента списка (Ли тег) внутри ол тег.

Чтобы извлечь эти случайные имена, создайте новый скрипт Python ex07.ру и введите в скрипт следующие строки кодов.

из selenium import webdriver
из селена.webdriver.общий.ключи импорт Ключи
браузер = веб-драйвер.Firefox (исполняемый_путь = "./ drivers / geckodriver ")
браузер.get ("http: // генератор случайных имен.Информация/")
nameList = браузер.find_elements_by_css_selector ('ол.nameList li ')
для имени в nameList:
печать (имя.текст)
браузер.покидать()

Как только вы закончите, сохраните ex07.ру Скрипт Python.

Здесь браузер.получать() метод загружает веб-страницу генератора случайных имен в браузере Firefox.

В браузер.find_elements_by_css_selector () метод использует селектор CSS ол.nameList li найти все Ли элементы внутри ол тег с именем класса список имен. Я сохранил все отобранные Ли элементы в список имен Переменная.

А для цикл используется для перебора список имен Список Ли элементы. На каждой итерации содержимое Ли элемент напечатан на консоли.

Если вы запустите ex07.ру Скрипт Python, он получит все случайные имена с веб-страницы и распечатает их на экране, как вы можете видеть на скриншоте ниже.

$ python3 ex07.ру

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

Пример 5: Отправка формы - поиск на DuckDuckGo

Этот пример так же прост, как и первый. В этом примере я захожу в поисковую систему DuckDuckGo и ищу термин селен hq используя Selenium.

Сначала зайдите в DuckDuckGo Search Engine из веб-браузера Firefox.

Если вы проверите поле ввода поиска, оно должно иметь идентификатор search_form_input_homepage, как вы можете видеть на скриншоте ниже.

Теперь создайте новый скрипт Python ex08.ру и введите в скрипт следующие строки кодов.

из selenium import webdriver
из селена.webdriver.общий.ключи импорт Ключи
браузер = веб-драйвер.Firefox (исполняемый_путь = "./ drivers / geckodriver ")
браузер.get ("https: // duckduckgo.com / ")
searchInput = браузер.find_element_by_id ('search_form_input_homepage')
searchInput.send_keys ('selenium hq' + ключи.ВХОДИТЬ)

Как только вы закончите, сохраните ex08.ру Скрипт Python.

Здесь браузер.получать() загружает домашнюю страницу поисковой системы DuckDuckGo в веб-браузере Firefox.

В браузер.find_element_by_id () метод выбирает элемент ввода с идентификатором search_form_input_homepage и хранит его в searchInput Переменная.

В searchInput.send_keys () используется для отправки данных нажатия клавиш в поле ввода. В этом примере он отправляет строку селен hq, и клавиша Enter нажимается с помощью Ключи.ВХОДИТЬ постоянный.

Как только поисковая система DuckDuckGo получит клавишу Enter, нажмите (Ключи.ВХОДИТЬ), он ищет и отображает результат.

Запустить ex08.ру Скрипт Python, как показано ниже:

$ python3 ex08.ру

Как видите, браузер Firefox посетил поисковую систему DuckDuckGo.

Он автоматически набрал селен hq в текстовом поле поиска.

Как только браузер получит клавишу Enter, нажмите (Ключи.ВХОДИТЬ), он отобразил результат поиска.

Пример 6: Отправка формы в W3Schools.ком

В примере 5 отправка формы поисковой системы DuckDuckGo была простой. Все, что вам нужно было сделать, это нажать клавишу Enter. Но это не относится ко всем формам. В этом примере я покажу вам более сложную обработку формы.

Сначала посетите страницу HTML-форм W3Schools.com из веб-браузера Firefox. После загрузки страницы вы должны увидеть пример формы. Это форма, которую мы отправим в этом примере.

Если вы проверите форму, Имя поле ввода должно иметь идентификатор имя, в Фамилия поле ввода должно иметь идентификатор lname, и Кнопка "Отправить" должен иметь тип представить, как вы можете видеть на скриншоте ниже.

Чтобы отправить эту форму с помощью Selenium, создайте новый скрипт Python ex09.ру и введите в скрипт следующие строки кодов.

из selenium import webdriver
из селена.webdriver.общий.ключи импорт Ключи
браузер = веб-драйвер.Firefox (исполняемый_путь = "./ drivers / geckodriver ")
браузер.get ("https: // www.w3schools.ru / html / html_forms.asp ")
fname = браузер.find_element_by_id ('имя_файла')
имя.Чисто()
имя.send_keys ('Шахриар')
lname = браузер.find_element_by_id ('lname')
lname.Чисто()
lname.send_keys ('Шовон')
submitButton = браузер.find_element_by_css_selector ('input [type = "submit"]')
submitButton.send_keys (Ключи.ВХОДИТЬ)

Как только вы закончите, сохраните ex09.ру Скрипт Python.

Здесь браузер.получать() открывает страницу HTML-форм W3schools в веб-браузере Firefox.

В браузер.find_element_by_id () метод находит поля ввода по идентификатору имя а также lname и хранит их в имя а также lname переменные соответственно.

В имя.Чисто() а также lname.Чисто() методы очищают имя по умолчанию (Джон) имя значение и фамилия (Доу) lname значение из полей ввода.

В имя.send_keys () а также lname.send_keys () тип методов Шахриар а также Шовон в Имя а также Фамилия поля ввода соответственно.

В браузер.find_element_by_css_selector () метод выбирает Кнопка "Отправить" формы и сохраняет его в submitButton Переменная.

В submitButton.send_keys () метод отправляет нажатие клавиши Enter (Ключи.ВХОДИТЬ) к Кнопка "Отправить" формы. Это действие отправляет форму.

Запустить ex09.ру Скрипт Python, как показано ниже:

$ python3 ex09.ру

Как видите, форма была отправлена ​​автоматически с правильными входными данными.

Заключение

Эта статья должна помочь вам начать работу с библиотеками Selenium для браузерного тестирования, веб-автоматизации и веб-скраппинга в Python 3. Для получения дополнительной информации ознакомьтесь с официальной документацией по Selenium Python.

Лучшие игры с командной строкой для Linux
Командная строка - не только ваш главный союзник при использовании Linux - она ​​также может быть источником развлечений, потому что вы можете использ...
Лучшие приложения для сопоставления геймпадов для Linux
Если вам нравится играть в игры на Linux с помощью геймпада вместо стандартной системы ввода с клавиатуры и мыши, для вас есть несколько полезных прил...
Полезные инструменты для геймеров Linux
Если вам нравится играть в игры на Linux, скорее всего, вы использовали приложения и утилиты, такие как Wine, Lutris и OBS Studio, для улучшения игров...