Сегодня я хотел бы порекомендовать вам инструмент автоматизации веб-страниц на основе Python: DrissionPage. Этот инструмент может не только управлять браузером, но и отправлять и получать пакеты данных, и даже может объединять и то, и другое. Проще говоря: он сочетает в себе удобство автоматизации WEB-браузера и высокую эффективность запросов.
Существует два типа способов реализации автоматизации веб-страниц:
Первый — легкий и быстрый, как библиотека запросов. Однако когда запросы касаются веб-сайтов, требующих входа в систему, им часто приходится иметь дело с методами защиты от сканирования, такими как коды проверки, обфускация JS и параметры подписи, и порог относительно высок. Если данные генерируются с помощью JS-расчета, процесс расчета необходимо воспроизводить, а эффективность разработки невысока.
Последний использует браузер напрямую для имитации поведения пользователя, например библиотека Selenium, которая позволяет в значительной степени обойти эти ловушки, но эффективность работы браузера невысока.
Таким образом, первоначальная цель дизайна DrissionPag — объединить их в один, иметь возможность переключать соответствующие режимы, когда необходимы различные потребности, и предоставить гуманизированный метод использования для повышения эффективности разработки и эксплуатации.
Объект, используемый платформой Selenium для управления браузером, называется Driver, а объект, используемый запросами для управления соединениями запросов, называется Session, поэтому Drission представляет собой комбинацию этих двух. В старой версии это достигалось путем повторной инкапсуляции селена и запросов.
Но начиная с версии 3.0 автор начал с нуля и реализовал все функции селена с помощью протокола хрома, тем самым избавившись от зависимости от селена. Он имеет больше и более сильные функции, более высокую эффективность работы и более гибкое развитие.
Эта библиотека использует полностью самостоятельно разработанное ядро. По сравнению с Selenium она имеет следующие преимущества:
Сказав так много, я считаю, что многие люди уже хотят попробовать. Как быстро создать эту структуру, необходимо сначала подготовить базовую среду.
Адрес проекта:
https://gitee.com/g1879/DrissionPage
Установите DrissionPage с помощью pip:
pip install DrissionPage
Кроме того, перед запуском мы сначала произведем несколько простых настроек. Если вы используете только функцию отправки и получения пакетов данных, никакой подготовки не требуется.
Если вы хотите управлять браузером, вы должны установить путь браузера. Настройки программы по умолчанию управляют Chrome, поэтому ниже в качестве демонстрации используется Chrome. Если вы хотите использовать Edge или другие браузеры на базе Chromium, метод настройки тот же.
Установить путь браузера:
from DrissionPage.easy_set import set_paths
set_paths(browser_path=r'Измените это на путь к файлу Chrome Browserexe')
Этот код зарегистрирует путь браузера Chrome к файлу конфигурации. Поскольку настройку пути необходимо выполнить только один раз, не записывайте ее в официальную программу. Обычно рекомендуется создать временный файл py, ввести следующий код, указать путь к exe-файлу браузера Chrome на вашем компьютере, а затем выполнить его.
1. Попробуйте запустить браузер:
from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get('https://www.baidu.com')
Выполните следующий код. Если браузер запускается нормально и имеется доступ к Baidu, его можно использовать напрямую, и вы можете пропустить следующие шаги.
Перед выполнением кода закройте браузер Chrome, если он открыт.
2. Сравнение с кодом фреймворка Selenium.
#Случай 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. Сравнение с кодом фреймворка запросов
# Случай 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
Например: используйте браузер для входа на сайт, а затем переключитесь на запросы на чтение веб-страницы. Информация для входа будет разделена между ними.
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')
Несмотря на то, что я попробовал DrissionPage, я также обнаружил некоторые недостатки, но в целом многие концепции дизайна все еще заслуживают изучения. Каждый может изучить больше функций. Адрес документа проекта:
http://g1879.gitee.io/drissionpagedocs/