Python вставить текст в поле браузера
информацию о кнопках на странице тоже выводит, значит элементы формы доступны.
но вот send_keys не срабатывает,
фреймов на странице нет.
через Jscript поле заполняется:
driver.execute_script( "document.getElementById(' pt1:content ').value = 'test';" )
На кнопку нажать тоже не получается.
Где могут быть грабли ?
попробовать добавить слип 5000 перед попыткой послать текст
может страничка ещё не успеваем до конца догрузиться к моменту посылки текста, ведь driver.get не гарантирует отображение
попробовать добавить слип 5000 перед попыткой послать текст
может страничка ещё не успеваем до конца догрузиться к моменту посылки текста, ведь driver.get не гарантирует отображение
не помогало, а вот time .sleep(3 0 ) - помогло. хм.
"видимость" элемента ещё не гарантирует что элемент "до конца подгрузился и готов к работе", ведь могут на странице ещё и скрипты и стили подгружаться и джёйквери и всё подряд
слип 30 это оверкилл конечно, только для дебага, чтобы удостоверится что вэйта не хватает
а вообще слип от секунды до трёх должен помочь
"видимость" элемента ещё не гарантирует что элемент "до конца подгрузился и готов к работе", ведь могут на странице ещё и скрипты и стили подгружаться и джёйквери и всё подряд
слип 30 это оверкилл конечно, только для дебага, чтобы удостоверится что вэйта не хватает
а вообще слип от секунды до трёх должен помочь
Худший пример такого кода — это использование команды time.sleep(), которая устанавливает точное время ожидания.
пытался использовать явные ожидания.
Худший пример такого кода — это использование команды time.sleep() , которая устанавливает точное время ожидания.
если бы была возможность точно узнавать когда страничка действительно загрузилась со всеми скриптами и цсс-ами, плюс узнать когда все скрипты на ней отработали - тогда конечно слип был бы не нужен
Продолжение перевода неофициальной документации Selenium для Python.
Перевод сделан с разрешения автора Baiju Muthukadan.
Оригинал можно найти здесь.
Содержание:
Предположительно, первое, что вы захотите сделать с помощью WebDriver, будет переход по ссылке. Обычно для таких целей используют метод get:
Метод driver.get перенаправляет к странице URL, поданной в параметре. WebDriver будет ждать пока страница не загрузится полностью (то есть, событие “onload” игнорируется), прежде чем передать контроль вашему тесту или скрипту. Стоит отметить, что если страница использует много AJAX-кода при загрузке, то WebDriver может не распознать, загрузилась ли она полностью. Если необходимо гарантировать полную загрузку страниц, вы можете использовать ожидания (англ. waits).
3.1. Взаимодействие со страницей
Сама по себе возможность переходить по ссылке не так уж полезна. Что действительно хочется сделать, так это взаимодействовать со страницей, или, если быть точным, с элементами HTML на странице. Прежде всего необходимо найти их. WebDriver предоставляет ряд способов для поиска элементов. К примеру, на странице есть элемент, определенный таким образом:
Его можно найти, используя любой из следующих методов:
Также вы можете искать адрес гиперссылки по тексту гиперссылки, но будьте бдительны: текст должен совпадать в точности. Также будьте внимательны при использовании XPATH в WebDriver. Если существует больше одного элемента, удовлетворяющего условиям запроса, вернется только первый найденный. Если ничего не будет найдено, будет возбуждено исключение NoSuchElementException.
Итак, мы получили элемент. Что вы можете с ним сделать? Первым делом вы захотите ввести какой-нибудь текст в текстовое поле:
Также вы можете имитировать нажатие клавиш-стрелок клавиатуры с помощью класса “Keys”:
Метод send_keys можно вызвать для любого элемента, который позволяет проверить сочетания клавиш, такие как те, что используются в GMail. Существует побочный эффект, заключающийся в том, что ввод в текстовое поле не очищает его автоматически. Вместо этого то, что вы набираете на клавиатуре, будет дописываться к уже вписанному в поле. Очистить содержимое тектового поля или текстовой области textarea легко — с помощью метода clear:
3.2. Заполнение форм
Мы уже рассмотрели ввод текста в текстовую область или текстовое поле, а как быть с другими элементами? Вы можете попробовать раскрыть раскрывающийся список, после чего можно использовать “setSelected” для выделения тэгов вроде OPTION. Работать с тэгами SELECT не так уж сложно:
Такой код найдет первый элемент “SELECT” на странице, и в цикле пройдет по всем тэгам OPTION поочередно, сообщая их значения и поочередно выделяя их.
Как можно заметить, это не самый быстрый способ работы с элементами SELECT. Поддерживаемые вебдрайвером классы содержат один, называющийся “Select”, он предоставляет более удобные способы взаимодействия:
Также WebDriver предоставляет возможность снятия выделения со всех элементов выпадающего списка:
Этот код снимает выделение со всех тегов OPTION первого тега SELECT на странице.
Допустим, для теста вам необходим список всех выделенных по умолчанию опций. Класс Select предоставляет такое свойство (возвращает список):
Для получения всех доступных опций используйте:
В качестве альтернативы первому методу можно использовать метод “submit”, доступный для каждого элемента. Если вызвать его для элемента внутри формы, WebDriver пробежится по всей структуре DOM, пока не найдет закрывающийся тег формы, и затем вызовет для нее submit. Если элемент находится не в форме, тогда возбудится исключение NoSuchElementException:
3.3. Перетаскивание
Есть два варианта «перетаскивания» элементов: перемещение элемента на определенную величину, либо перетаскивание его на другой элемент:
3.4. Переключение между окнами и фрэймами
Современные веб-приложения редко обходятся без фреймов (frame) и редко когда ограничиваются одним окном. WebDriver поддерживает переключение между именованными окнами с помощью метода “switch_to_window”:
Все вызовы, начинающиеся с driver теперь будут истолкованы как обращенные к полученному окну. Но откуда вам знать имя окна? Взгляните на код javascript или ссылку, которые открывают окно:
Также вы можете послать “дескриптор окна” методу “switch_to_window()”. Пользуясь этой особенностью, вы можете использовать цикл для перебора всех открытых окон, к примеру, так:
Еще вы можете переходить между фрэймами (frame или iframes):
Можно получить доступ к подчиненным фреймам, подавая путь, разделяемый точкой, или можно получить фрейм по индексу:
Следующий код перенаправит к фрейму с именем “child”, который в свою очередь принадлежит первому подчиненному фрейму фрейма “frameName”. Пути к фреймам описываются полностью — от верхнего уровня:
Когда работа с фреймами будет завершена, необходимо переключиться обратно, к главному фрейму, что может быть сделано следующим образом:
3.5. Всплывающие окна
Selenium WebDriver из упаковки поддерживает управление всплывающими диалоговыми окнами. После того как вы инициируете запуск, откроется окно, управлять им можно так:
Код вернет объект текущего открытого окна. С этим объектом вы можете принять, отклонить вопрос окна, прочитать его содержимое или даже ввести текст по приглашению окна. Интерфейс взаимодействия со всплывающими окнами работает одинаково хорошо как для предупреждений (alerts), так и для запросов к подтверждению (confirms) и приглашений к вводу (prompts). За дополнительной информацией обратитесь к документации API.
3.6. Навигация: история и локация
Чтобы перейти вперед или назад по истории вкладки:
Имейте в виду, что этот функционал полностью зависит от используемого драйвера. Вы можете получить непредвиденный результат, если привыкли к поведению какого-либо конкретного браузера, а работаете с другим.
Прежде, чем мы завершим эту главу, вам возможно будет интересно узнать как использовать куки. Прежде всего, вам необходим домен, использующий куки:
Python – один из самых популярных языков для веб-автоматизации с Selenium, поскольку в нем есть упрощенный синтаксис, который позволяет выполнять больше задач за меньшее количество строк кода! Таким образом, Python и Selenium создают идеальную комбинацию для автоматизированного тестирования в вебе.
Все больше разработчиков, как и я в свое время, осваивают Python, который считается третьим по популярности языком, если верить опросу Stack Overflow Developer Survey 2021. Поэтому шпаргалка по Selenium с Python может служить для ознакомления с полезным API для автоматизации веб-сайтов (или веб-приложений).
Если в Selenium вы новичок и вам интересно, что же это такое, мы рекомендуем ознакомиться с нашим руководством What is Selenium?.
В этой статье мы разберемся с модулем в Python, который предоставляет нам функционал Selenium WebDriver. Для установки пакета Selenium WebDriver мы воспользуемся Python Package Index (PyPI). Выполните в терминале следующую команду, чтобы установить Selenium для Python:
Если вы хотите запускать свои сценарии тестирования онлайн с Selenium Grid, воспользуйтесь LambdaTest для автоматизации тестирования.
Эта библиотека Python оборачивает Selenium WebDriver и предоставляет методы для автоматизации целого ряда задач, таких как заполнение форм, вход на сайт, нажатие на кнопки и многое другое. Кроме того, вы можете ознакомиться с руководством по Selenium с Python, в котором подробно рассматриваются неотъемлемые аспекты Selenium Python с точки зрения автоматизации веб-тестирования.
Команды, которые вы увидите в шпаргалке, можно использовать в качестве удобного ресурса для всех, кто играется с Selenium на Python для автоматизации веб-приложений. Если вам нужно краткое описание работы Selenium в Python, ознакомьтесь с руководством, в котором подробно рассматривается архитектура Selenium WebDriver и освещаются неотъемлемые аспекты, связанные с Selenium WebDriver в Python. Итак, давайте начнем нашу шпаргалку!
Импортируем библиотеку Selenium
Перед тем, как начать пользоваться командами Selenium, вам нужно импортировать пакет Selenium WebDriver.
Инициализация дайвера в Python
После загрузки соответствующего драйвера браузера вам необходимо запустить Selenium WebDriver и драйвер браузера (например, ChromeDriver для Chrome, GeckoDriver для Firefox и т.д.).
Для Internet Explorer
Если местоположения драйвера браузера нет в переменной PATH (или если его нет в System Path), нужно добавить следующие аргументы:
executable_path : Путь к вашему веб-драйверу Selenium (бинарный файл)
options : Параметры, касающиеся выполнения веб-браузеров
Настройка параметров Selenium WebDriver
Класс Options в Selenium обычно используется в сочетании с желаемыми возможностями кастомизации Selenium WebDriver.
Так вы можете выполнять различные операции, такие как открытие браузера (Chrome, Firefox, Safari, IE, Edge и т.д.) в режиме увеличения, включение и отключение расширений браузера, отключение режима GPU, отключение всплывающих окон и многое другое. Поэтому важно хорошо разобраться в этом разделе шпаргалки по Selenium в Python, поскольку так вы сможете решить проблемы автоматизации, связанные с изменением свойств браузера, о которых мы говорили ранее.
Для Chrome
Импорт опций Chrome
2. Инициализация опций Chrome
3. Добавление желаемых возможностей
4.Добавление желаемых возможностей сессии
Для Firefox
Импорт опций Firefox
2. Инициализация опций Firefox
3. Добавление желаемых возможностей
4. Добавление желаемых возможностей сессии
Поиск элемента
Поиск элемента по атрибуту ID
В этом методе поиск элемента в DOM производится по ID. ID уникален для каждого элемента на странице. Таким образом, с помощью ID можно однозначно идентифицировать элемент. Например, ниже показано использование атрибута ID для поиска веб-элементов на странице входа в систему LambdaTest:
Так вы можете воспользоваться атрибутом ID в Selenium:
Поиск элемента по классу CSS
Элементы в HTML DOM еще можно найти по имени класса, который хранится в атрибуте класса HTML-тега. У класса может быть несколько экземпляров, но метод вернет первый элемент с соответствующим классом.
Так можно использовать имя класса для определения местоположения элемента Email Address на странице LambdaTest:
Поиск элемента по имени
Веб-элементы, такие как открывающий тег, имеют связанный с ними атрибут Name. В Selenium есть метод поиска веб-элементов с помощью атрибута NAME. Если у нескольких элементов одинаковое имя, он вернет первое совпадение.
Вот HTML-код, в котором есть элемент ввода имени Name.
Ниже показано использование метода Selenium Python для определения местоположения веб-элемента с помощью атрибута NAME:
Поиск элемента по XPath
XPath использует путь для выбора узлов и определения местоположения необходимого веб-элемента. Метод find_element_by_xpath() используется для поиска соответствующего элемента в документе с помощью XPath. Вы можете почитать руководство по XPath в Selenium, чтобы получить более глубокое представление об использовании XPath для поиска веб-элементов при автоматизации с Selenium.
Ниже показан поиск элемента email с помощью атрибута XPath:
Поиск элемента по тегу
Этот метод используется для поиска и выбора веб-элементов по HTML-тегу. Метод find_element_by_tag_name() используется для поиска таких тегов, как H1, DIV, INPUT и т.д. Если тег встречается несколько раз, он возвращает первый совпадающий.
Ниже показан поиск элемента с email-адресом по тегу:
Поиск элемента по тексту ссылки и частичному тексту ссылки
Этот метод ищет элемент по тексту ссылки (целому или части). При поиске частичного текста ссылки не ищется точное совпадение со строковым значением, поскольку ищется подмножество строк (в тексте ссылки).
Локатор текста ссылок в Selenium и частичного текста ссылок работает только со ссылками текущего веб-приложения.
Ниже показан поиск элемента на странице входа LambdaTest с помощью локатора текста ссылок:
Ниже показан поиск элемента на странице входа LambdaTest с помощью локатора частичного текста ссылок:
Различные методы поиска элементов
Есть два метода, которые могут быть полезны для поиска элементов страницы в сочетании с классом «By» для выбора атрибутов.
Обратите внимание, что нет никакой разницы между методами find_element_by_tag и find_element(By.tag) . По умолчанию метод find_element_by_tag вызывает find_element(By.tag) .
find_element возвращает первый экземпляр из нескольких веб-элементов с определенным атрибутом в DOM. Метод вызывает исключение NoSuchElementException , если ни один элемент не соответствует требуемому локатору. Прочитайте статью о популярных исключениях Selenium, чтобы лучше понять, из-за чего они возникают.
find_elements возвращает список всех экземпляров веб-элементов, соответствующих определенному атрибуту. Список будет пустым, если в DOM нет нужных элементов.
Ниже вы увидите список атрибутов, доступных для класса By :
TAG_NAME = “tag name”
CLASS_NAME = “class name”
LINK_TEXT = “link text”
PARTIAL_LINK_TEXT = “partial link text”
Дальше показан пример использования метода find_element , который использует локатор XPath для поиска нужного веб-элемента:
Открытие ссылки или документа
Перед выполнением любых операций с веб-элементами, присутствующими на странице, важно открыть целевой URL-адрес (или тестовый URL-адрес). Далее вы увидите несколько способов открыть URL-адрес в Selenium с Python:
driver.get(URL)
Метод driver.get() переходит на страницу, которая передается методу в параметре. Selenium WebDriver будет ждать, пока страница не загрузится полностью, после чего он запустит событие «onload» и вернет управление сценарию тестирования. В статье Selenium Waits in Python вы можете найти дополнительную информацию про обработку ожиданий в Selenium.
Обновление страницы
Бывают сценарии, в которых нужно обновлять содержимое страницы. Метод обновления страниц в Selenium WebDriver используется для обновления веб-страниц.
Метод driver.refresh() обновляет текущую веб-страницу. Он не принимает никаких аргументов и не возвращает никаких значений.
Ввод текста в веб-элемент
Метод send_keys() в Python используется для ввода текста в текстовый элемент. Такой текст передается методу в качестве аргумента. Тот же метод можно использовать для имитации нажатия клавиш в любом поле (например, в полях ввода формы).
Пример использования send_keys() , в котором адрес электронной почты передается текстовому элементу на странице регистрации LambdaTest:
Удаление текста в веб-элементе
Метод element.clear() в Selenium используется для удаления текста из полей, таких как поля ввода формы и т.д.
Пример использования метода очистки содержимого поля ввода электронной почты на домашней странице LambdaTest:
Нажатие на веб-элемент
Метод element.click() в Selenium используется для нажатия на элемент, такой как ссылка-якорь, кнопка и т.д.
Вот так с помощью метода click() можно нажать на кнопку на домашней странице LambdaTest:
Перетаскивание веб-элемента
Перетаскивание объектов является одним из широко используемых сценариев в популярных приложениях (или программах), таких как Canvas, Google Drive, Trello, Asana и т.д. Метод drag_and_drop (элемент, цель) в Selenium помогает автоматизировать функционал перетаскивания веб-элементов из источника и переноса их в целевую область (или элемент).
У класса Actions в Selenium есть два метода, с помощью которых вы можете выполнять операции перетаскивания при тестировании кроссбраузерной совместимости. Обязательно ознакомьтесь с нашим подробным руководством, в котором есть информация о том, как выполнять перетаскивание в Selenium.
Вот простой пример использования метода drag_and_drop() :
Выбор опции
Select (элемент) предоставляет полезные методы для взаимодействия с раскрывающимися списками, выбора элементов и многого другого.
Так можно выбрать элемент по индексу:
Вот некоторые вариации выбора нужного элемента с помощью метода select_by_*() :
Метод
Описание
Метод принимает целочисленное значение - индекс опции, которую мы хотим выбрать.
Метод принимает строковое значение и выбирает опцию, в которой есть нужный текст.
Метод принимает строковое значение и выбирает параметр с тем же значением атрибута.
Метод позволяет отменить выбор всех выбранных опций.
Навигация между окнами
Если у вас несколько окон, может потребоваться переключаться между ними перед выполнением действий с веб-элементами из DOM.
driver.switch_to_window(“имя_окна”)
Метод switch_to_window() Selenium WebDriver позволяет переключиться на нужное окно. Дескриптор окна передается в качестве аргумента методу switch_to_window() .
Все последующие вызовы WebDriver теперь применяются к окну в фокусе (или к новому окну после переключения).
driver.window_handles
Свойство window_handles WebDriver возвращает дескрипторы окон. Теперь вы можете использовать метод switch_to_window() для перехода к любому окну из списка window_handles .
driver.current_window_handle
Метод current_window_handle() возвращает дескриптор текущего окна (или окна в фокусе).
Переключение на iFrame
Selenium WebDriver не умеет получать доступ или находить веб-элементы внутри iFrame в контексте главной страницы. Следовательно, вам необходимо переключиться на iFrame, прежде чем обращаться к элементам внутри него.
driver.switch_to_frame(“имя_iframe”)
Метод switch_to_frame() в Selenium Python позволяет менять контекст WebDriver из контекста главной страницы. Также мы можем получить доступ к сабфреймам, добавив между путем и индексом точку.
driver.switch_to_default_content()
Метод позволяет возвращаться обратно к контексту главной страницы.
Обработка всплывающих окон и оповещений
Существует всего три основных типа всплывающих окон и предупреждений, которые обычно используются в веб-приложениях:
driver.switch_to.alert
Свойство switch_to.alert в WebDriver возвращает открытый в данный момент объект alert . Вы можете принять его, отклонить, прочитать содержимое или ввести его в командную строку.
alert_obj.accept()
Как только у вас есть дескриптор окна alert (например, alert_obj ), метод accept() поможет вам принять всплывающее окно предупреждения.
alert_obj.dismiss()
После того как вы переключились на окно alert (например, alert_obj ), вы можете использовать метод dismiss() , чтобы отклонить всплывающее окно предупреждения.
alert_obj.text()
Получение кода страницы
Метод page_source() в Selenium WebDriver используется для получения кода страницы.
Навигация по истории браузера
Selenium WebDriver на Python предоставляет несколько функций для перемещения вперед-назад по истории браузера.
driver.forward()
Этот метод позволяет сценариям перемещаться на один шаг вперед по истории браузера.
driver.back()
Этот метод позволяет сценариям перемещаться на один шаг назад по истории браузера.
Обработка Cookie в Selenium
Обработка файлов cookie в Selenium WebDriver является одним из распространенных сценариев, с которым вам, возможно, придется иметь дело при автоматизации. Можно выполнять различные операции, такие как добавление, удаление, получение имени файла cookie и многое другое.
driver.add_cookie()
Этот метод помогает настроить файл cookie для сессии Selenium. Он принимает значения в виде пары ключ-значение.
Этот метод выводит все доступные файлы cookie для текущей сессии Selenium.
driver.delete_cookie()
Есть возможность удалить определенный файл cookie или все файлы cookie, связанные с текущей сессией Selenium.
Установка размера окна
Настройка тайм-аутов в Selenium WebDriver
Когда браузер загружает страницу, веб-элементы внутри нее могут загружаться через различные промежутки времени. Это может создать сложности при взаимодействии с динамическими элементами, присутствующими на странице.
Если элемент отсутствует в DOM веб-страницы, метод locate вызовет исключение. Ожидания в Selenium позволяют добавлять задержки (в миллисекундах или секундах) между действиями, выполняемыми между загрузкой страницы и поиском требуемого веб-элемента.
Неявное ожидание и явное ожидание - два основных способа добавления задержек в код Selenium в Python для обработки динамических веб-элементов на странице.
Неявное ожидание в Selenium Python
Неявное ожидание информирует Selenium WebDriver о необходимости проверять DOM в течение определенного периода времени при попытке найти веб-элемент, который не доступен сразу после загрузки страницы.
По умолчанию неявное ожидание равно нулю. Однако, как только мы определяем его, оно устанавливается на время жизни объекта WebDriver. Ознакомьтесь с подробным руководством, в котором более детально демонстрируется использование неявного ожидания в Selenium Python.
Явное ожидание в Selenium Python
Явное ожидание в Selenium с Python используется, когда мы хотим дождаться выполнения определенного условия, прежде чем продолжить работу.
В Selenium WebDriver есть несколько удобных методов, которые позволяют подождать, пока не будет выполнено определенное условие. Например, явное ожидание можно получить с помощью класса webdriverWait в сочетании с ожидаемыми условиями в Selenium.
Вот некоторые из ожидаемых условий, которые можно использовать в сочетании с явным ожиданием в Selenium Python:
Автоматизация работы с веб-браузером набирает все большую популярность и в настоящее время появилось много инструментов, предоставляющих разработчикам эту возможность, от «всемогущих» фреймворков настоящих «швейцарских ножей» до узкоспециализированных утилит.
Автоматизация взаимодействия пользователя с веб-браузером часто используется как для тестирования в ходе процесса разработки ( development ), так и на стадии завершении работы над проектом ( production ). Также автоматизация управления веб-браузером может использоваться для извлечения данных из открытых источников сети Интернет для последующего анализа и обработки полученных данных.
То как вы используете технологии автоматизации работы с браузером будет зависит только от вас, просто убедитесь, что то, что вы делаете является законным. Поскольку «боты», созданные с помощью инструментов автоматизации, могут нарушать законные права владельцев контента сайтов или процесс функционирование сайта.
Selenium является одним из наиболее широко используемых инструментов автоматизации веб-браузера, и предлагает широкий функционал для управления браузером.
Что такое Selenium?
Selenium — отличный инструмент, который позволяет разработчикам эмулировать (имитировать) действия в браузере пользователя с использованием всего лишь нескольких строк кода. Используя инструменты, которые он предлагает, очень легко реализуется загрузка содержимого веб-страниц в браузер, а также имитация взаимодействия пользователя с её элементами и даже с учетом особенностей человеческого поведения.
Так для борьбы с «ботами», имитирующими поведение людей, используются сложные специализированные системы для распознавания поведения, подобного человеку, которое иногда невозможно воспроизвести с помощью инструментов автоматизации работы с веб-браузером.
Поэтому если вы создаете приложение с помощью Selenium, убедитесь, что вы не нарушаете законов, связанных с правилами Web Browser Automation . Используйте его для целей тестирования в при разработке собственных проектов.
Перечислим некоторые из наиболее популярных задач, решаемых с помощью Selenium, хотя весь их список конечно же не ограничивается приведенными ниже:
- нажатие кнопок;
- ввод текста;
- извлечение текста;
- доступ к данным в cookie файлах;
- нажатие клавиш.
Подготовка к работе
Прежде чем мы начнем, нам необходимо проделать следующие операции:
- Установка браузер Google Chrome на свой компьютер — далее мы будем имитировать действия пользователя в браузере Google Chrome. Хотя вы конечно же можете использовать Selenium в других браузерах, но в этой статье я буду описывать способы работы с Google Chrome.
- Загрузите chromedriver.exe , в дальнейшем вам потребуется указать путь к этому исполняемому файлу на вашем компьютере.
- Установите пакет selenium package запустив в консоли команду pip install selenium .
Основы работы с Selenium
Отлично, теперь мы готовы начать работать с Selenium. Попробуем запустить браузер и перейти по заданному URL:
driver — это экземпляр класса WebDriver импортируемого из пакета Selenium , который мы далее будем использовать для управлению действиями браузера, например:
Код выше выведет в консоли исходный HTML код всего содержимого нашей страницы, полученного с помощью метода get(URL) . Поэтому если вам в дальнейшем необходимо будет просмотреть содержимое запрашиваемой страницы, то этот прием вам пригодится.
Положение элементов на странице
Как правило, вам совсем не нужно всё содержимое страницы, а лишь только её отдельных частей (HTML элементов). Поэтому вначале необходимо определить местоположение нужного нам HTML элемента на странице, для этого можно использовать инструмент Inspect Element из состава web developer tools браузера Google Chrome.
Для решения нашей задачи, нам необходимо узнать идентификатор тега элемента, над содержимым которого мы хотим затем поработать. И для этого необходимо сделать следующее в обычной сессии Google Chome:
Выберите в контекстном меню «Просмотреть код»
Как ещё можно использовать этот инструмент для поиска элементов на странице, вы можете прочитать на официальном сайте.
Отметим, что полученный таким способом идентификатор должен однозначно указывать на нужный нам HTML элемент. Если в качестве идентификатор мы указываем его уникальный на целевой странице id , то наш код, обрабатывающий содержимое элемента, будет работать так, как мы хотим. Но в случае если в качестве идентификатора мы будем использовать значение других атрибутов тега, например class , то полученные результаты могут отличаться от ожидаемых.
Получив идентификаторы нужных нам элементов, мы можем выполнять над ними и их содержимым различные действия.
Получение элементов и их содержимого по id
Если знаете id нужного вам элемента, то его со всем содержимым, а также вложенными элементами, можно легко получить следующим способом:
Получение элементов по значению атрибута name
Аналогично предыдущему примеру:
Получение элементов по имени класса
И снова, аналогично предыдущему примеру кода:
Получение элементов по имени тега HTML
Так же вы можете получить элементы страницы по имени тега:
В этом случае переменная links получает все элементы с тегом a , находящиеся на загруженной странице .
Получение элементов с использованием синктаксиса XPath
Как вы понимаете не все элементы страницы могут иметь уникальный идентификатор. Или, например, получив доступ с помощью метода find_elements_by_tag_name ко всем элементам на странице с заданным тегом, нам в принципе не нужно содержимое каждого из них, а лишь одного конкретного элемента из выборки.
Для решения подобных задач были разработаны другие способы получения содержимого конкретного элемента на странице, например, с использованием синтаксиса XPath (языка запросов к элементам XML документа). С использованием XPath вы сможете находить элементы на странице более быстрым и эффективным способом:
Переменная tag_list теперь содержит все элементы страницы с тегом tag у которого задан атрибут attr с установленным значением val :
Теперь вы можете перебирать итерируемый объект tag_list и обрабатывать по отдельности его элементы, имеющие тип WebElement , описанный в пакете Selenium.
Вы можете больше прочитать об использовании XPath в Selenium по ссылке .
Selenium WebElement
Класс WebElement , определенный в Selenium, по сути является представлением обычного HTML элемента. С ним вы можете выполнять все те же операции, как и с обычными HTML элементами на странице, подобно тому, как взаимодействует с ними конечный пользователь.
Перечислим основные из них:
- Доступ к простым свойствам элемента, таким как текст внутри: element.text
- Доступ к родительским элементам, которые также имеют тип WebElement : element.parent
- Доступ к атрибутам элементов, таким как href тега a : element.get_attribute('href')
- Поиск в содержимом элемента (так же, как в глобальном корневом объекте driver )
- Кликать по нему (нажимать на нем левой кнопкой мыши): element.click()
- Пользовательский ввод в элемент текстовой информации, если это возможно для его типа: element.send_keys(‘Input Text')
Selenium WebDriver
Объект WebDriver схож с WebElement , однако их основным отличием является контекст его применения. Таким образом, область действия последнего — это сам элемент, а первого — вся страница в целом.
С помощью объекта WebDriver вы можете осуществлять множество операций, а точнее практически проделывать все действия, что может сделать человек с обычным браузером.
Вот некоторые полезные его полезные возможности:
- Запуск на странице произвольных JavaScript скриптов: driver.execute_script("script")
- Сохранять скриншоты страницы: driver.save_screenshot('image.jpg')
- Включить режим работы браузера в режиме «headless» ( Как работает Headless Chrome ). Таким образом браузер экономит время, исключая этап рендеринга страницы:
Обратите внимание на то, что в методе set_window_size указывается размер окна браузера, он устанавливается равным (1440, 900) . Это важно для предотвращения ситуаций, связанных с присутствием на странице элементов, которые могут не загружаются в «headless» режиме (загрузка которых зависит от текущего размера окна браузера, а точнее размера экрана устройства).
Вы можете изменять разрешение или размер окна браузера на любое другое значение, но вы должны помнить, что в этом случае для текущего экземпляра объекта driver это значение будет установлено по умолчанию.
Навигация по странице
Доступ к файлам cookie
Вам может понадобиться добавить или удалить файлы cookie браузера, с заданным содержимым:
Этот код предписывает браузеру создать файлы cookie с заданными значениями атрибутов some_attr и some_other_attr . Это может быть использовано, в случае если вам необходимо добавить в файлы cookie данные аутентификации или другую информацию. Напомним, что содержимое файла cookie имеет формат схожий с синтаксисом словаря dict .
Также очень легко получить cookie из текущей сессии браузера:
Приведенный выше код выведет в консоли содержимое каждого файла cookie из текущей сессии браузера.
Изменение HTML кода страницы
Если вам понадобилось изменить свойства определенного HTML элемента страницы, например, добавить или удалить его атрибуты и т. д. То как уже упоминалось ранее, вы можете использовать объект Selenium WebDriver для выполнения произвольного JavaScript кода на загруженной странице. Таким образом с помощью JavaScript можно легко изменять любые свойства элементов страницы:
Здесь element — это элемент страницы, полученный любым из описанных выше способов. attr соответственно его атрибут, который нужно изменить (или добавить), а value — его значение.
Загрузка файлов с использованием ссылок на скачивание
Допустим вам необходимо загрузить какой-либо файл с веб-сайта. Следующий код поможет это осуществить:
Также вы можете указать путь к папке для сохранения скаченного файла, определив значение свойства download.default_directory , например, так — path\to\directory .
Нажатие клавиш клавиатуры
Этот код эмулирует нажатие клавиши «стрелка вниз» ( Keys.ARROW_DOWN ) 3 раза. После каждого нажатия action.send_keys(Keys.ARROW_DOWN) программа ожидает небольшой промежуток времени (0.1 сек.).
Таким образом, объект Keys позволяет эмулировать нажатия любых клавиш вашей клавиатурой. Что позволяет, например, использовать событие Keys.TAB (нажатие клавиши Tab ) для перемещения фокуса между элементами ввода в формах (касается элементов, способных принимать фокус для ввода с клавиатуры). Или эмулировать нажатие клавиш Keys.RETURN и Keys.SPACE , что облегчает взаимодействие с элементами ввода данных, а также имитирует поведение человека.
Нажатия на кнопки и другие HTML элементы
Как уже говорилось выше, вы можете использовать эмуляцию событий нажатия клавиши Tab для перемещения между элементами на странице, клавиши Space (пробел) для заполнения checkbox (флажков), а также клавиш со стрелками для перемещения между пунктами выпадающего меню.
Но более простым является следующий способ реализации взаимодействия с HTML элементами, такими как button или элементами option выпадающего списка значений select . Способ включает в себя выполнение следующих действий: поиск и получение конкретного элемента на странице с помощью объекта webdriver , а затем инициирование клика по нему:
Ввод данных в элементы ввода форм
Вы также можете эмулировать нажатия клавиш внутри HTML элементов ввода в формы текстовой информации:
Таким способом, например, вы можете поместить текстовую информацию в элемент text или textarea .
Кстати, код выше использует сочетание клавиш ( CTRL + A ) для выделения всего текста внутри элемента element . А следующая строка заменяет выделенный текст заданным произвольным строковым значением из переменной value .
И так, для эмуляции нажатия сочетаний клавиш передавайте их через параметры метода send_keys .
Скроллинг
Иногда некоторые части страницы загружаются только после ее прокрутки вниз. Например, канал в Instagram или любая другая страница с “бесконечной” прокруткой (с использованием AJAX). C помощью приведенного ниже скрипта JavaScript можно прокрутить страницу браузера вниз:
Приведенный выше код использует команды языка JavaScript для прокрутки до нижней части страницы, теперь вы можете использовать метод driver.page_source и получить полное содержимое страницы.
Заключение
Selenium — один из наиболее широко используемых инструментов для автоматизации работы с веб-браузером, который предлагает множество функций и возможностей для просмотра и сбора информации. В основном он используется для автоматизации тестирования веб-приложений в ходе разработки, хотя его также можно эффективно использовать в качестве инструмента для сбора информации ( web scraping ).
Соблюдайте законы, если вы осуществляете сбор контента из ресурсов Интернет. Не нарушайте авторские права 😉
Selenium — это инструмент для автоматизированного управления браузерами. Наиболее популярной областью применения Selenium является автоматизация тестирования веб-приложений. Однако можно автоматизировать любые другие рутинные действия, выполняемые через браузер.
Для браузера Firefox загружаем драйвер geckodriver для своей версии ОС и прописываем путь к нему в переменной окружения PATH .
Пробуем управлять браузером удаленно:
Объект WebDriver имеет большое количество методов, предназначенных для поиска элементов на странице. Эти методы можно поделить на две группы: find_element_*() и find_elements_*() . Методы первой группы возвращают одиночный объект WebElement , который представляет первый из найденных на странице элементов. Методы второй группы возвращают список объектов WebElement , соответствующих запросу.
- find_element_by_id() — элемент с указанным id
- find_element_by_name() — элемент с указанным значением атрибута name
- find_element_by_tag_name() — элемент с указанным именем тега
- find_element_by_class_name() — элемент с указанным CSS-классом
- find_element_by_css_selector() — элемент с указанным CSS-селектором
- find_element_by_link_text() — элемент с указанным текстом
- find_element_by_partial_link_text() — элемент , содержащий указанный текст
- find_elements_by_name() — элементы с указанным значением атрибута name
- find_elements_by_tag_name() — элементы с указанным именем тега
- find_elements_by_class_name() — элементы с указанным CSS-классом
- find_elements_by_css_selector() — элементы с указанным CSS-селектором
- find_elements_by_link_text() — элементы с указанным текстом
- find_elements_by_partial_link_text() — элементы , содержащие указанный текст
Находим поля «Имя пользователя» и «Пароль»:
Свойства и методы объекта WebElement :
- tag_name — имя тега
- get_attribute() — значение атрибута с указанным именем
- text — текст, содержащийся в элементе
- clear() — удаляет текст, введенный в текстовое поле
- is_displayed() — возвращает True , если элемент видимый и False в противном случае
- is_enabled() — возвращает True для элемента ввода, если элемент активизирован и False в противном случае
- is_selected() — возвращает True для checkbox , если элемент выбран и False в противном случае
- location — словарь с ключами x и y позиции элемента на странице
Клик на элементе страницы
Объект WebElement имеет метод click() , имитирующий клик мышкой на элементе. Этот метод можно использовать для перехода по ссылке, для отправки данных формы или инициирования любого другого действия, которое может быть запущено кликом на элементе.
Заполнение и отправка формы
Для отправки данных формы:
- находим нужные поля
- заполняем их, используя метод send_keys()
- вызываем метод submit() для любого элемента формы или метод click() для кнопки Submit
Отправка кодов специальных клавиш
Selenium включает модуль для отправки в браузер нажатий специальных клавиш: Up, Down, Left, Right, Enter, Return, Home, PageUp, PageDown, End, Escape, BackSpace, Delete, F1…F12, Tab.
Щелчки на кнопках браузера
Модуль Selenium также может имитировать щелчки на кнопках браузера:
Дополнительно
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Читайте также: