Порекомендуйте новую среду автоматического тестирования: DrissionPage!
Порекомендуйте новую среду автоматического тестирования: DrissionPage!

Сегодня я хотел бы порекомендовать вам инструмент автоматизации веб-страниц на основе Python: DrissionPage. Этот инструмент может не только управлять браузером, но и отправлять и получать пакеты данных, и даже может объединять и то, и другое. Проще говоря: он сочетает в себе удобство автоматизации WEB-браузера и высокую эффективность запросов.

1. Предыстория создания DrissionPage

Существует два типа способов реализации автоматизации веб-страниц:

  • Отправьте пакет запроса непосредственно на сервер для получения необходимых данных.
  • Имитируйте поведение реального пользователя и управляйте браузером для взаимодействия с веб-страницей.

Первый — легкий и быстрый, как библиотека запросов. Однако когда запросы касаются веб-сайтов, требующих входа в систему, им часто приходится иметь дело с методами защиты от сканирования, такими как коды проверки, обфускация JS и параметры подписи, и порог относительно высок. Если данные генерируются с помощью JS-расчета, процесс расчета необходимо воспроизводить, а эффективность разработки невысока.

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

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

Почему он называется DrissionPag?

Объект, используемый платформой Selenium для управления браузером, называется Driver, а объект, используемый запросами для управления соединениями запросов, называется Session, поэтому Drission представляет собой комбинацию этих двух. В старой версии это достигалось путем повторной инкапсуляции селена и запросов.

Но начиная с версии 3.0 автор начал с нуля и реализовал все функции селена с помощью протокола хрома, тем самым избавившись от зависимости от селена. Он имеет больше и более сильные функции, более высокую эффективность работы и более гибкое развитие.

2. Основные моменты DrissionPage

Эта библиотека использует полностью самостоятельно разработанное ядро. По сравнению с Selenium она имеет следующие преимущества:

  • Нет функции веб-драйвера, веб-сайт не распознается, нет необходимости загружать разные драйверы для разных версий браузеров.
  • Он работает быстрее и может искать элементы в iframe без переключения между ними. iframe рассматривается как обычный элемент, и вы можете напрямую искать элементы в нем после его получения. Логика становится более понятной.
  • Вы можете одновременно работать с несколькими вкладками в браузере, даже если вкладка неактивна, переключаться не нужно.
  • Встроенные возможности ожидания и автоматической повторной попытки. Сделайте нестабильные сети более простыми в управлении, программы более стабильными и написание более простым.
  • Позволяет повторно использовать уже открытый браузер. Нет необходимости каждый раз запускать браузер с нуля, что делает отладку очень удобной.
  • Минималистические грамматические правила. Интегрируйте большое количество часто используемых функций, что упрощает поиск элементов, делает его более мощным и стабильным.
  • Инкапсулированный в режиме POM, он может использоваться непосредственно для тестирования и легко расширяться.
  • и т. д. . .

3. Монтаж и строительство

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

Экологическая подготовка

  • Операционная система: Windows, Linux или Mac.
  • версия Python: 3.6 и выше
  • Поддерживаемые браузеры: ядро ​​Chromium (например, Chrome и Edge).

Адрес проекта:

Язык кода:txt
копировать
https://gitee.com/g1879/DrissionPage

Установите DrissionPage с помощью pip:

Язык кода:txt
копировать
pip install DrissionPage

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

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

Установить путь браузера:

Язык кода:txt
копировать
from DrissionPage.easy_set import set_paths
set_paths(browser_path=r'Измените это на путь к файлу Chrome Browserexe')

Этот код зарегистрирует путь браузера Chrome к файлу конфигурации. Поскольку настройку пути необходимо выполнить только один раз, не записывайте ее в официальную программу. Обычно рекомендуется создать временный файл py, ввести следующий код, указать путь к exe-файлу браузера Chrome на вашем компьютере, а затем выполнить его.

4. Попробуйте

1. Попробуйте запустить браузер:

Язык кода:txt
копировать
from DrissionPage import ChromiumPage

page = ChromiumPage()
page.get('https://www.baidu.com')

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

Перед выполнением кода закройте браузер Chrome, если он открыт.

2. Сравнение с кодом фреймворка Selenium.

Язык кода:txt
копировать
#Случай 1: используйте явный метод ожидания, чтобы найти первый текст, содержащий some text элементы.
# использовать selenium:
element = WebDriverWait(driver).until(ec.presence_of_element_located((By.XPATH, '//*[contains(text(), "some text")]')))

# использовать DrissionPage:
element = page('some text')

#Случай 2: переход на первую вкладку
# использовать selenium:
driver.switch_to.window(driver.window_handles[0])

# использовать DrissionPage:
page.to_tab(0)

# Случай 3. Перетащите элемент.
# использовать selenium:
ActionChains(driver).drag_and_drop(ele1, ele2).perform()

# использовать DrissionPage:
ele1.drag_to(ele2)

Приведенный выше код реализует точно такую ​​же функцию, но код DrissionPage явно более краток и элегантен.

3. Сравнение с кодом фреймворка запросов

Язык кода:txt
копировать
# Случай 1: Получить содержимое элемента
url = 'https://baike.baidu.com/item/python'

# использовать requests:
from lxml import etree
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'}
response = requests.get(url, headers = headers)
html = etree.HTML(response.text)
element = html.xpath('//h1')[0]
title = element.text

# использовать DrissionPage:
page = WebPage('s')
page.get(url)
title = page('tag:h1').text

4. Переключение между различными режимами DrissionPage

Например: используйте браузер для входа на сайт, а затем переключитесь на запросы на чтение веб-страницы. Информация для входа будет разделена между ними.

Язык кода:txt
копировать
from DrissionPage import WebPage
from time import sleep

# Создать объект страницы, по умолчанию d модель
page = WebPage()  
# Посетите страницу личного центра (не авторизован, перенаправлен на страницу входа)
page.get('https://gitee.com/profile')  

# использовать selenium Введите пароль учетной записи для входа
page.ele('@id:user_login').input('your_user_name')  
page.ele('@id:user_password').input('your_password\n')
sleep(1)

# переключиться на s модель
page.change_mode()  
# После входа в систему session Вывод модели
print('После входа в системуtitle:', page.title, '\n')  

5. Резюме

Несмотря на то, что я попробовал DrissionPage, я также обнаружил некоторые недостатки, но в целом многие концепции дизайна все еще заслуживают изучения. Каждый может изучить больше функций. Адрес документа проекта:

Язык кода:txt
копировать
http://g1879.gitee.io/drissionpagedocs/
boy illustration
Краткое изложение 10 способов регистрации bean-компонентов в SpringBoot
boy illustration
Flask Learning-9. 2 способа включения режима отладки (debug mode).
boy illustration
Руководство по настройке самостоятельного сервера для Eudemons Parlu
boy illustration
40 вопросов для собеседований по SpringBoot, которые необходимо задавать на собеседованиях! При необходимости ответьте на вопросы для собеседования SpringBoot [предлагаемый сборник] [легко понять]
boy illustration
Через два года JVM может быть заменен GraalVM.
boy illustration
Разрешение циклических зависимостей Spring Bean: существует ли неразрешимая циклическая ссылка?
boy illustration
Разница между промежуточным программным обеспечением ASP.NET Core и фильтрами
boy illustration
[Серия Foolish Old Man] Ноябрь 2023 г. Специальная тема Winform Control Элемент управления DataGridView Подробное объяснение
boy illustration
.NET Как загрузить файлы через HttpWebRequest
boy illustration
[Веселый проект Docker] Обновленная версия 2023 года! Создайте эксклюзивный инструмент управления паролями за 10 минут — Vaultwarden
boy illustration
Высокопроизводительная библиотека бревен Golang zap + компонент для резки бревен лесоруба подробное объяснение
boy illustration
Концепция и использование Springboot ConstraintValidator
boy illustration
Новые функции Go 1.23: точная настройка основных библиотек, таких как срезы и синхронизация, значительно улучшающая процесс разработки.
boy illustration
[Весна] Введение и базовое использование AOP в Spring, SpringBoot использует AOP.
boy illustration
Чтобы начать работу с рабочим процессом Flowable, этой статьи достаточно.
boy illustration
Байтовое интервью: как решить проблему с задержкой сообщений MQ?
boy illustration
ASP.NET Core использует функциональные переключатели для управления реализацией доступа по маршрутизации.
boy illustration
[Проблема] Решение Невозможно подключиться к Redis; вложенное исключение — io.lettuce.core.RedisConnectionException.
boy illustration
От теории к практике: проектирование чистой архитектуры в проектах Go
boy illustration
Решение проблемы искажения китайских символов при чтении файлов Net Core.
boy illustration
Реализация легких независимых конвейеров с использованием Brighter
boy illustration
Как удалить и вернуть указанную пару ключ-значение из ассоциативного массива в PHP
boy illustration
Feiniu fnos использует Docker для развертывания учебного пособия по AList
boy illustration
Принципы и практика использования многопоточности в различных версиях .NET.
boy illustration
Как использовать PaddleOCRSharp в рамках .NET
boy illustration
CRUD используется уже два или три года. Как читать исходный код Spring?
boy illustration
Устраните проблему совместимости между версией Spring Boot и Gradle Java: возникла проблема при настройке корневого проекта «demo1» > Не удалось.
boy illustration
Научите вас шаг за шагом, как настроить Nginx.
boy illustration
Это руководство — все, что вам нужно для руководства по автономному развертыванию сервера для проектов Python уровня няни (рекомендуемый сборник).
boy illustration
Не удалось запустить docker.service — Подробное объяснение идеального решения ️