Selenium как использовать свой профиль браузера

Обновлено: 07.07.2024

Автор оригинала: Olawale Aladeusi.

Я потратил довольно много времени на то, чтобы понять, как настроить сетку selenium. Поэтому я решил изложить то, что узнал, в письменном виде. В этой статье я расскажу о некоторых шагах по настройке selenium grid. Вам не нужно быть экспертом по селену, чтобы понять эту статью, единственное, что вам нужно знать, это как написать базовый код JAVA.

Прежде чем мы начнем, давайте обсудим некоторые основные концепции

Что такое селен?

Что такое Селеновая сетка?

Selenium-Grid позволяет вам запускать тесты на разных компьютерах в разных браузерах параллельно(в одно и то же время). То есть одновременное выполнение нескольких тестов на разных машинах с разными браузерами и операционными системами. Селеновая сетка поддерживает распределенное выполнение тестов. Подробнее читайте здесь . Selenium Grid использует концепцию узла-концентратора, в которой вы запускаете тест только на одной машине, называемой концентратором, но выполнение будет выполняться разными машинами, называемыми узлами.

Что такое концентратор и узел сети Selenium?

Что такое веб-драйвер Selenium?

Что такое тестирование?

Тестирование Тестирование-это платформа тестирования, вдохновленная JUnit и NUnit, но представляющая некоторые новые функции, которые делают ее более мощной и простой в использовании. Он предназначен для охвата всех категорий тестов. Читайте больше здесь

Что такое Apache Maven?

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

Зависимости

Прежде чем вы сможете завершить эту статью, в вашей системе должно быть установлено следующее

Выполните следующие действия на своем терминале, чтобы проверить, установлена ли в вашей системе среда выполнения Java и Maven

Результат должен быть похож на этот

Установив все зависимости, давайте начнем с настройки и запуска концентратора и узла selenium grid.

Настройка концентратора Selenium Grid

ШАГ 1 Загрузите автономный сервер selenium и поместите его в любой каталог на тестовой машине, позвольте позвонить на нашу тестовую машину Машина А . Нажмите здесь , чтобы загрузить последнюю версию selenium standalone server. Автономный сервер Selenium-это единственное, что нам нужно для запуска нашего хаба.

Прежде чем продолжить, запишите IP-адрес вашей тестовой машины(машина A). Если вы используете систему mac, вы можете использовать следующую команду для проверки своего IP-адреса

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

вы должны увидеть свой IP-адрес в результате выполнения вышеуказанных команд. Сохраните где-нибудь IP-адрес, он нам понадобится на следующем шаге

ШАГ 2 Теперь давайте запустим наш хаб . Откройте терминал или командную строку, если вы используете ОС windows, и измените каталог, в котором вы сохранили автономный сервер selenium, загруженный в ШАГ 1 .

Затем выполните следующую команду

После выполнения команды вы должны увидеть что-то похожее на приведенное ниже

Примечание: вы можете выбрать любой из вышеперечисленных драйверов в зависимости от того, в каком браузере вы хотите выполнить тест.

Когда вы закончите загрузку драйверов, если ваша вторая машина работает под управлением ОС windows, вы можете создать папку selenium на диске C и поместить в нее все драйверы.

Откройте командную строку или терминал, в зависимости от обстоятельств, на машине B и выполните следующие команды, чтобы запустить узел

Примечание: ШАГ 3 должен быть выполнен на виртуальной машине или на второй машине, если вы не используете виртуальную машину.

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

Теперь, когда наш концентратор и узел запущены, давайте напишем простой тестовый сценарий, который будет выполняться параллельно в нескольких браузерах.

Что мы собираемся проверить?

Тестовые Зависимости

Создание Тестового Проекта На IntelliJ

Теперь давайте добавим в проект следующие плагины

Добавить плагины в проект Добавить следующий код в проект pom.xml (файл находится в корневом каталоге проекта) файл;

Затем создайте новый пакет в <имя_проекта>/src/main/java/ и назовите его base (внутри этого пакета мы создадим класс, который настроит наш тестовый драйвер). Когда вы закончите, создайте класс java внутри базового пакета и назовите его Драйвер настройки . Добавьте следующий код в SetupTestDriver класс

Теперь, когда у нас есть SetupTestDriver класс полностью настроен, давайте создадим простой тест java для проверки окна поиска Google.

создайте новый тестовый класс в src/test/java , мы можем назвать его Тест поиска Google

Добавьте в класс следующий код

Создайте новый пакет ресурсов в src/test/ , назовем его ресурсы. Создайте новый пакет внутри ресурсы , назовем его пусковые установки - в нем будут размещены наши файлы пусковых установок тестов. Создайте другой файл google.xml внутри пакета пусковых установок.

Добавьте следующее в google.xml

Бежать

Чтобы запустить тест, откройте google.xml и щелкните по нему правой кнопкой мыши, затем выберите Бежать

Селен + Python Настройка параметров браузера Chrome


1. Справочная информация

При использовании технологии рендеринга в браузере selenium для сканирования информации на сайте по умолчанию это обычный браузер с чистым Chrome, и мы обычно добавляем некоторые плагины, расширения, агенты и другие приложения при использовании браузера. Соответственно, когда мы используем браузер Chrome для сканирования веб-сайта, нам может потребоваться выполнить специальную настройку для этого хрома, чтобы он соответствовал поведению сканера.
Обычно используемые поведения:
Запретить загрузку изображений и видео. Увеличьте скорость загрузки веб-страниц.
Добавить прокси: технология защиты от лазания, используемая для доступа к определенным страницам через стену или реагирования на ограничения частоты доступа по IP.
Использовать мобильную голову: зайдите на мобильный сайт, как правило, технология против скалолазания на этом сайте относительно слаба.
Добавить расширения: функционирует как обычный браузер.
Установите код: ответьте на китайскую станцию, чтобы предотвратить искажение символов.
Блокировать выполнение JavaScript.
………

2. Окружающая среда

python 3.6.1
Система: win7
IDE:pycharm
Установили браузер Chrome
Хромированный драйвер настроен
selenium 3.7.0

ChromeOptions - это класс, который настраивает запуск Chrome как атрибут. С помощью этого класса мы можем настроить следующие параметры для Chrome (эту часть можно увидеть через исходный код селена):
Установить местоположение двоичного файла Chrome (binary_location)
Добавить параметры запуска (add_argument)
Добавить приложение расширения (add_extension, add_encoded_extension)
Добавить параметры экспериментальной настройки (add_experimental_option)
Установить адрес отладчика (debugger_address)

4. Общая конфигурация

4.1 Установить формат кодировки

4.2 Моделирование мобильных устройств

4.3 Запретить загрузку изображений

Это может увеличить скорость сканирования без загрузки изображений.

4.4 Добавить агента

Добавьте прокси-сервер для искателя селена. В этом месте особенно важно отметить, что при выборе прокси-сервера старайтесь выбирать статический IP-адрес, чтобы повысить стабильность сканирования. Потому что если вы выбираете селен в качестве сканера, это означает, что антискользящая способность веб-сайта относительно высока (в противном случае он находится прямо на скрапе), и у него более высокий контроль согласованности между веб-страницами, файлами cookie и статусом пользователя. Если вы используете динамический анонимный IP, время выживания каждого IP будет очень коротким (1

4.5 Настройки параметров браузера

Обычно Selenium открывает чистый браузер без расширений, но иногда мы хотим установить в браузере некоторые настройки, например, установить значение по умолчанию для параметра flash, чтобы всегда разрешать глобальное удаление файлов cookie, очистку кешей и тому подобное.
Для достижения этой цели существует способ мышления. В качестве примера ниже приводится браузер Chrome:
Когда запускается искатель селена, сначала откройте окно, введите в адресную строку: chrome: // settings / content или chrome: // settings / privacy, а затем программу, как в обычном веб-приложении. Аналогично, установите и сохраните.
Напишите описание изображения здесь

4.6. Добавить приложение для расширения браузера

Обычно Selenium открывает чистый браузер без расширений, но иногда нам нужно использовать некоторые плагины для обхода данных, такие как класс синтаксического анализа xpath helper, класс перевода и получение дополнительной информации (продажи). Итак, как мы можем добавить некоторые плагины, которые нам нужны, когда мы запускаем chromedriver?

Ниже приведен пример загрузки подключаемого модуля Xpath Helper в Chrome:

4.6.2 Заполните путь к плагину в коде

4.6.3 Отображение результатов

Напишите описание изображения здесь
4.6.4. Примечания

5. Другие параметры

5.1 Команды адресной строки Chrome

Введите следующую команду в адресной строке браузера Chrome, и соответствующий результат будет возвращен. Эти команды включают в себя просмотр состояния памяти, состояния браузера, состояния сети, состояния DNS-сервера, кеша подключаемых модулей и т. Д. Однако следует отметить, что эти команды постоянно меняются, поэтому их не обязательно легко использовать.
about: version - отображает текущую версию
about: memory - отображает использование памяти локальным браузером
about: plugins-отображает установленные плагины
about: история отображения гистограмм
about: dns-отображает статус DNS
about: кэш-страница отображения кеша
about: gpu-есть ли аппаратное ускорение
О файле: flags-Open Некоторые плагины // После использования что-то всплывает: «Пожалуйста, будьте осторожны, эти эксперименты могут быть рискованными», интересно, если я испорчу свою конфигурацию!
chrome: // extensions / -Просмотреть установленные расширения

5.2 Практические параметры Chrome

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


Автоматизация взаимодействия пользователя с веб-браузером часто используется как для тестирования в ходе процесса разработки ( development ), так и на стадии завершении работы над проектом ( production ). Также автоматизация управления веб-браузером может использоваться для извлечения данных из открытых источников сети Интернет для последующего анализа и обработки полученных данных.

То как вы используете технологии автоматизации работы с браузером будет зависит только от вас, просто убедитесь, что то, что вы делаете является законным. Поскольку «боты», созданные с помощью инструментов автоматизации, могут нарушать законные права владельцев контента сайтов или процесс функционирование сайта.

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

Что такое Selenium?

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

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

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

  • нажатие кнопок;
  • ввод текста;
  • извлечение текста;
  • доступ к данным в cookie файлах;
  • нажатие клавиш.

Подготовка к работе

Прежде чем мы начнем, нам необходимо проделать следующие операции:

Основы работы с Selenium

Отлично, теперь мы готовы начать работать с Selenium. Попробуем запустить браузер и перейти по заданному URL:

Код выше выведет в консоли исходный 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 вы можете осуществлять множество операций, а точнее практически проделывать все действия, что может сделать человек с обычным браузером.

Вот некоторые полезные его полезные возможности:

  • Запуск на странице произвольных 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 можно легко изменять любые свойства элементов страницы:

Загрузка файлов с использованием ссылок на скачивание

Допустим вам необходимо загрузить какой-либо файл с веб-сайта. Следующий код поможет это осуществить:

Нажатие клавиш клавиатуры

Таким образом, объект 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 и получить полное содержимое страницы.

Заключение

Соблюдайте законы, если вы осуществляете сбор контента из ресурсов Интернет. Не нарушайте авторские права 😉


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

Содержание

1. Мотивация: отслеживаем музыкальные привычки

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

Конечно, вы можете покопаться в истории вашего браузера и проверить каждую песню, но это весьма болезненная затея… Все, что вы помните, это то, что вы услышали песню несколько месяцев назад и она в жанре электроника.

«Было бы классно», думаете вы «Если бы у меня запись моей истории прослушиваний. Я мог бы просто взглянуть на электронную музыку, которую я слушал пару месяцев назад и найти эту песню!»

История прослушиваний будет сохранена на диске в CSV файле. Далее, вы можете в любой момент просматривать CSV файл в вашей любимой программе для работы с таблицами, или даже в Python.

Консольный браузер – это обычный веб браузер, который работает без видимого пользовательского интерфейса. Как вы могли догадаться, он может делать больше, чем выполнять запросы: проводить рендер HTML (правда, вы этого не будете видеть), хранить информацию о сессии, даже проводить асинхронные сетевые связи на коде JavaScript.

Если вы хотите автоматизировать современную сеть, консольные браузеры – неотъемлемая часть.

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

2. Установка и Настройка Selenium

Первый шаг, перед тем как написать первую строчку кода – это установка Selenium с поддержкой WebDriver для вашего любимого браузера. Далее в статье мы будем работать с Firefox Selenium, но Chrome также будет отлично.

По выше указанным ссылкам имеется полное описание процесса установки драйверов для Selenium.

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

Читайте также: