Pyppeteer — это порт популярной библиотеки Puppeteer для Node.js на Python, который используется для программного управления браузерами Chrome или Chromium без графического интерфейса.
По сути, Pyppeteer позволяет разработчикам на Python автоматизировать задачи в веб-браузере, такие как скрапинг веб-страниц, тестирование веб-приложений или взаимодействие с сайтами, как если бы это делал реальный пользователь, но без графического интерфейса.
Browserless — это облачное решение для браузера, которое позволяет эффективно автоматизировать браузер, скрапить сайты и тестировать.
Он использует библиотеку отпечатков пальцев Nstbrowser для включения случайного переключения отпечатков пальцев, что приводит к беспроблемному сбору данных и автоматизации. Надежная облачная инфраструктура Browserless упрощает управление автоматизированными действиями, позволяя одновременно получать доступ к нескольким экземплярам браузера.
Есть ли у вас замечательные идеи и сомнения по поводу веб-скрапинга и Browserless?
Давайте посмотрим, чем делятся другие разработчики на Discord и Telegram!
При использовании Browserless вы не видите экран, поэтому, когда нам нужно знать конкретный экран браузера по некоторым ссылкам, рекомендуется использовать API скриншотов для получения скриншота.
Выполнение следующего скрипта создаст скриншот с именем youtube_screenshot.png в текущем пути к скрипту:
import asyncio
from pyppeteer import connect
async def main():
# Подключение к браузеру
browser = await connect(browserWSEndpoint=browser_ws_endpoint)
print("Подключено!")
# Создание новой страницы
page = await browser.newPage()
# Посещение youtube
await page.goto("https://www.youtube.com/")
# сделать скриншот
await page.screenshot({"path": "youtube_screenshot.png"})
await page.close()
asyncio.run(main())
На современных сайтах для динамического обновления контента используется JavaScript. Например, социальные сети часто используют бесконечную прокрутку для своих постов, а загрузка данных страницы также требует ожидания ответа бэкэнда, а также различных операций с формами и различных событий браузера.
Да, Pyppeteer также может выполнять это: ожидание загрузки, щелчок кнопок, ввод в формы и другие операции с браузером.
Обычно используемые API для ожидания загрузки страницы — это waitForSelector и waitFor.
waitForSelector в основном используется для того, чтобы убедиться, что определенный элемент на странице загружен правильноwaitFor просто ждет заданное время.import asyncio
from pyppeteer import connect
async def main():
# Подключение к браузеру
browser = await connect(browserWSEndpoint=browser_ws_endpoint)
print("Подключено!")
# Посещение nasa
page = await browser.newPage()
await page.goto("https://www.disney.com/")
# Ожидание загрузки новостей
await page.waitForSelector('.content-body')
# подождите еще 2 секунды
await page.waitFor(2000)
# сделать скриншот
await page.screenshot({"path": "disney.png"})
await page.close()
asyncio.run(main())
В page.evaluate вы можете задать положение полосы прокрутки, вызвав API окна, что очень удобно.
import asyncio
from pyppeteer import connect
async def main():
# Подключение к браузеру
browser = await connect(browserWSEndpoint=browser_ws_endpoint)
print("Подключено!")
# Посещение HBO Max
page = await browser.newPage()
await page.goto('https://www.max.com/');
# Прокрутка до конца
await page.evaluate("window.scrollTo(0, document.documentElement.scrollHeight)");
# сделать скриншот
await page.screenshot({"path": "HBOMax.png"})
await page.close()
asyncio.run(main())
В Python Pyppeteer мы можем использовать page.click, чтобы щелкнуть кнопку или гиперссылку. Установка задержки ввода делает ее больше похожей на действия реального пользователя.
Ниже приведен простой пример.
import asyncio
from pyppeteer import connect
async def main():
# Подключение к браузеру
browser = await connect(browserWSEndpoint=browser_ws_endpoint)
print("Подключено!")
page = await browser.newPage()
await page.goto("https://example.com/")
# щелкнуть ссылку
await page.click("p > a", {"delay": 200})
# сделать скриншот
await page.screenshot({"path": "example.png"})
await page.close()
asyncio.run(main())
Как ввести данные с помощью Python Pyppeteer? Используйте page.type, чтобы ввести текст в указанное поле ввода.
import asyncio
from pyppeteer import connect
async def main():
# Подключение к браузеру
browser = await connect(browserWSEndpoint=browser_ws_endpoint)
print("Подключено!")
# Создание новой страницы
page = await browser.newPage()
# Посещение разработчика Chrome
await page.goto("https://developer.chrome.com/")
await page.setViewport({"width": 1920, "height": 1080})
# Ввод текста в поле поиска
await page.type(".devsite-search-field", "headless", {"delay": 200})
# сделать скриншот
await page.screenshot({"path": "developer.png"})
await page.close()
asyncio.run(main())
После приведенных выше примеров мы можем легко представить себе взаимодействия, участвующие в входе, такие как операция ввода типа и операция щелчка кнопки.
Итак, в следующем примере давайте изменим способ написания. Мы попробуем войти в Nstbrowser Client. После входа я сделаю скриншот, чтобы проверить, был ли вход успешным.
import asyncio
from pyppeteer import connect
async def main():
# Подключение к браузеру
browser = await connect(browserWSEndpoint=browser_ws_endpoint)
print("Подключено!")
# Посещение Nstbrowser Client
page = await browser.newPage()
await page.goto("https://app.nstbrowser.io/account/login")
await page.waitForSelector("input")
inputs = await page.querySelectorAll("input")
# Введите свой адрес электронной почты в первое поле ввода
await inputs[0].type("[email protected]", delay=100)
# Введите свой пароль во второе поле ввода
await inputs[1].type("9KLYUWn3GmrzHPRGQl0EZ1QP3OWPFwcB", delay=100)
buttons = await page.querySelectorAll("button")
# Нажмите кнопку входа
await buttons[1].click()
# Ожидание ответа на запрос входа
login_url = "https://api.nstbrowser.io/api/v1/passport/login"
await page.waitForResponse(lambda res: res.url == login_url)
await page.waitFor(2000)
# сделать скриншот
await page.screenshot({"fullPage": True, "path": "./nstbrowser.png"})
await page.close()
asyncio.run(main())

Мы видим, что наш проект перенаправлен на домашнюю страницу, что означает, что мы успешно вошли в Nstbrowser!
Может ли Pyppeteer работать с Browserless?
Конечно, вы можете найти конкретные шаги по интеграции Pyppeteer в Browserless!
Прежде чем начать, нам нужна служба Browserless. Использование Browserless может решить сложные задачи веб-скрапинга и крупномасштабной автоматизации, и сейчас оно достигло полностью управляемого облачного развертывания.
Browserless использует браузерно-ориентированный подход, обеспечивает мощные возможности развертывания без графического интерфейса, а также обеспечивает более высокую производительность и надежность. Чтобы узнать больше о Browserless, вы можете нажать здесь, чтобы узнать больше.
Получите API KEY и перейдите на страницу меню Browserless в клиенте Nstbrowser, или вы можете нажать здесь, чтобы получить доступ

Pyppeteer — это версия Puppeteer для Python, которая предоставляет аналогичные функции и позволяет разработчикам управлять браузерами без графического интерфейса с помощью скриптов Python. Он позволяет разработчикам автоматизировать взаимодействие с веб-страницами с помощью кода Python и очень широко используется в таких сценариях, как краулеры, тестирование и захват данных.
pip install pyppeteer
Нам нужно подготовить следующий код. Просто введите свой API-ключ и прокси, чтобы подключиться к Browserless.
from urllib.parse import urlencode
import json
token = "ваш api ключ" # 'необходимо'
config = {
"proxy": "ваш прокси", # необходимо; формат ввода: схема://пользователь:пароль@хост:порт например: http://пользователь:пароль@localhost:8080
# "platform": "windows", # поддержка: windows, mac, linux
# "kernel": 'chromium', # только поддержка: chromium
# "kernelMilestone": '128', # поддержка: 128
# "args": {
# "--proxy-bypass-list": "detect.nstbrowser.io"
# }, # аргументы браузера
# "fingerprint": {
# userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.6613.85 Safari/537.36', # userAgent поддерживается с версии 0.15.0
# },
}
query = urlencode({"token": token, "config": json.dumps(config)})
browser_ws_endpoint = f"ws://less.nstbrowser.io/connect?{query}"
Подключено, давайте начнем скрапинг!
import asyncio
from pyppeteer import connect
async def main():
# Подключение к браузеру
browser = await connect(browserWSEndpoint=browser_ws_endpoint)
print("Подключено!")
asyncio.run(main())
В этом блоге мы рассмотрим простой пример, который поможет вам быстро начать работу с Browserless - скрапинг Books to Scrape.
В следующем примере мы пытаемся собрать все названия книг на текущей странице:

import asyncio
from pyppeteer import connect
async def main():
# Подключение к браузеру
browser = await connect(browserWSEndpoint=browser_ws_endpoint)
print("Подключено!")
# Создание новой страницы
page = await browser.newPage()
# Посещение Books to Scrape
await page.goto("http://books.toscrape.com/")
# Ожидание загрузки списка книг
await page.waitForSelector("section")
# Выбор всех элементов названия книги
books = await page.querySelectorAll("article.product_pod > h3 > a")
# цикл по всем элементам для извлечения названий
for book in books:
title_element = await book.getProperty("textContent")
title = await title_element.jsonValue()
print(f"[{title}]")
await page.close()
# Запуск скрипта
asyncio.run(main())
Выполнение приведенного выше скрипта выведет все собранные данные в консоль:

Вы можете просмотреть статистику по недавним запросам и оставшемуся времени сеанса в меню Browserless клиента Nstbrowser.

Большинство разработчиков могут столкнуться с некоторыми ошибками при настройке и использовании Pyppeteer. Не волнуйтесь! Здесь вы можете узнать, как их исправить.
При установке Pyppeteer вы можете столкнуться с ошибкой "Не удалось установить Pyppeteer".
Проверьте версию Python в вашей системе. Pyppeteer поддерживает только Python 3.6 и выше. Поэтому попробуйте обновить Python и переустановить Pyppeteer.
Вы можете столкнуться с этой ошибкой: pyppeteer.errors.BrowserError: Browser closed unexpectedly, когда вы впервые запускаете скрипт Pyppeteer Python после установки.
Это означает, что все зависимости Chromium не установлены полностью. Установите драйвер Chrome вручную с помощью следующей команды:
pyppeteer-install
Pyppeteer — это неофициальный порт классической библиотеки Node.js Puppeteer для Python. Это простой в установке, легкий и быстрый пакет для веб-автоматизации и скрапинга динамических сайтов.
В этом блоге вы узнали:
Если вы хотите узнать больше о функциях Browserless, ознакомьтесь с официальным руководством. Nstbrowser предоставляет вам лучший облачный браузер, чтобы решить локальные ограничения работы с автоматизацией.