В этом руководстве вы узнаете о курсоре Ghost Cursor. К моменту завершения руководства вы сможете ответить на следующие вопросы.
- Что такое призрачный курсор?
- С какими инструментами совместим Ghost Cursor?
- Как используется курсор Ghost Cursor?
- Совместим ли он с инструментами для разблокировки (прокси, удаленные браузеры и т. д.)?
- Когда Ghost Cursor – это правильный выбор?
Что такое курсор-призрак и почему он должен вас волновать?
Ghost Cursor – это плагин для Puppeteer. Он позволяет управлять курсором мыши и осуществлять взаимодействие со страницей, используя более человекоподобные движения.
Когда вы нажимаете на кнопку с помощью Puppeteer, курсор мгновенно перемещается к кнопке и нажимает на нее. Это очень роботизированно. Да, это быстро и эффективно, но это одна из тех вещей, из-за которых вас часто блокируют при работе в Интернете.
С помощью Ghost Cursor мы создаем бесконечное количество точек на кривой между двумя точками на странице. Затем курсор следует по этой кривой от текущего местоположения до целевого элемента. Такая кривая выглядит гораздо более человечно.
Начало работы
Прежде чем мы начнем кодировать, мы предполагаем, что вы знакомы с JavaScript на базовом уровне. Для начала нам нужно создать новую папку проекта и инициализировать проект JavaScript.
Приведенная ниже команда создает новую папку и переходит в каталог нашего проекта.
mkdir your-ghost-cursor-project
cd your-ghost-cursor-project
Вы можете использовать npm init
, чтобы преобразовать эту новую папку в проект NodeJS. Мы используем флаг --y
, потому что это учебное пособие. Нам не нужна готовая настройка с решениями по лицензированию.
npm init --y
Теперь установим наши зависимости. Довольно просто – у нас их всего две.
npm install ghost-cursor puppeteer
Основные способы использования призрачного курсора
В приведенном ниже сценарии мы демонстрируем базовое использование Ghost Cursor. Сначала мы запускаем браузер headful – это не обязательное условие, но вы сможете увидеть Ghost Cursor в действии.
После создания новой страницы мы передаем ее в функцию installMouseHelper()
. Это позволит нам увидеть перемещение курсора внутри отрисованной страницы. Затем мы создаем объект курсора. Курсор получает местоположение книги и щелкает по ней.
Наконец, перед тем как закрыть браузер и выйти из программы, мы делаем скриншот страницы продукта.
const puppeteer = require('puppeteer');
const { createCursor, installMouseHelper } = require('ghost-cursor');
//this function holds our runtime
async function run() {
//launch a headed browser to watch ghost cursor in action
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
//this allows you to watch the cursor as it moves around
await installMouseHelper(page);
//create the actual cursor object
const cursor = createCursor(page);
await page.goto("https://books.toscrape.com");
//find the link inside the product pod
const book = await cursor.getElement("article[class='product_pod'] a");
//get its location (x,y) coordinates
const location = cursor.getLocation(book);
//move to the coordinates
await cursor.moveTo(location);
//click on the book
await cursor.click(book);
//take a screenshot of the product page
await page.screenshot({path: "book.png"});
await browser.close();
}
run().catch(console.error);
Доступные методы в курсоре-призраке
Теперь, когда вы увидели Ghost Cursor в действии, давайте рассмотрим, что делают его отдельные методы. Каждый из них – это новый инструмент для вашего набора инструментов для скраппинга.
installMouseHelper()
Мы использовали функцию installMouseHelper()
для отслеживания движения мыши в рендеринге браузера. Этот метод позволяет наблюдать за курсором в действии. Эта часть не требуется для использования курсора, и для ее работы нужен браузер с головой. Это скорее отладочная деталь, чем полезный инструмент.
//launch a headed browser to watch ghost cursor in action
const browser = await puppeteer.launch({
headless: false,
});
const page = await browser.newPage();
//this allows you to watch the cursor as it moves around
await installMouseHelper(page);
getElement()
getElement()
работает практически так же, как page.$()
в Puppeteer. На самом деле, мы даже передавали обычные элементы Puppeteer в другие методы, и курсор глючил, но продолжал работать. При поиске элемента на странице лучше всего использовать cursor.getElement()
.
//find the link inside the product pod
const book = await cursor.getElement("article[class='product_pod'] a");
getLocation()
После того как вы нашли элемент, вам часто требуется определить его местоположение. Этот метод позволяет получить координаты (x,y) любого элемента страницы с минимальным количеством кода.
//get its location (x,y) coordinates
const location = cursor.getLocation(book);
move()
move()
– очень удобный метод. Вы можете передать объект селектора или элемент страницы прямо в move()
, и курсор переместится на него – естественно, как человек.
//move straight to the book
await cursor.move(book);
//click on the book
await cursor.click(book);
moveTo()
moveTo
позволяет передавать координаты непосредственно в курсор. Вместо того чтобы переходить к книге, мы используем функцию getLocation()
и передаем ее результат в курсор с помощью moveTo()
.
//move to the coordinates
await cursor.moveTo(location);
//click on the book
await cursor.click(book);
scrollIntoView()
Иногда вам не нужно наводить курсор непосредственно на объект. Возможно, вам просто нужно прокрутить страницу. Функция scrollIntoView()
позволяет передать селектор или элемент страницы и прокручивать страницу до тех пор, пока элемент не появится в области просмотра.
//scroll until the book is in the viewport
await cursor.scrollIntoView(book);
//click on the book
await cursor.click(book);
scrollTo()
scrollTo()
– еще одна очень удобная функция. Она позволяет передавать значения сверху
, снизу
, слева
и справа
. Управляйте движениями прокрутки с помощью естественного языка, никакого искусственного интеллекта не требуется!
//scroll to the top of the page
await cursor.scrollTo('top');
//click on the book
await cursor.click(book);
прокрутить()
scroll()
– это, пожалуй, самое базовое из наших действий прокрутки. При прокрутке вы передаете координаты (x,y) – помните getLocation()
? Затем курсор прокручивается до тех пор, пока не окажется в пределах области просмотра.
//move to the coordinates
await cursor.scroll(location);
//click on the book
await cursor.click(book);
Общие ограничения курсора-призрака
- Капчи: Ghost Cursor могут заставить вас казаться более человечным, но в конце концов именно вы контролируете скребок. Ознакомьтесь с 10 лучшими решателями CAPTCHA, чтобы узнать больше.
- Кукловод: Ghost cursor официально поддерживает только Puppeteer. По сравнению с другими безголовыми браузерами, такими как Selenium и Playwright, Puppeteer довольно ограничен и не имеет достаточного количества функций и поддержки.
- Только локально: Ghost Cursor должен запускаться локально. Это сильно ограничивает возможности разблокировки. С помощью Scraping Browser вы можете запускать удаленные безголовые браузеры с автоматическим управлением прокси и решением CAPTCHA. Поскольку Ghost Cursor не поддерживает удаленный просмотр, он не может воспользоваться всеми преимуществами лучших доступных инструментов.
Интеграция прокси-сервера
Хотя Puppeteer не поддерживает Scraping Browser, он интегрируется с локальными прокси-серверами. Puppeteer использует стандартную аутентификацию с помощью URL-адреса прокси-сервера, имени пользователя и пароля.
Приведенный ниже код представляет собой базовый скрипт, который можно настроить для любого времени выполнения Puppeteer/Ghost Cursor. Не забудьте заменить имя пользователя, имя зоны и пароль на свои собственные учетные данные!
const puppeteer = require('puppeteer');
const { createCursor } = require('ghost-cursor');
async function run() {
const browser = await puppeteer.launch({
headless: false,
args: [
'--proxy-server=http://brd.superproxy.io:33335',
'--ignore-certificate-errors'
]
});
const page = await browser.newPage();
const cursor = createCursor(page);
await page.authenticate({
username: "brd-customer-<your-username>-zone-<your-zone-name>",
password: "<your-password>"
});
await page.goto("https://ipinfo.io");
await cursor.click("a[href='/what-is-my-ip']");
await page.screenshot({path: "ipinfo.png"});
await browser.close();
}
run().catch(console.error);
Как уже говорилось, при использовании Puppeteer и Ghost Cursor вы не можете в полной мере воспользоваться преимуществами самого браузера Scraping Browser. Ниже показана стоимость одного запуска с использованием приведенного выше скрепера. Расходы действительно впечатляют.
При ручном управлении прокси-серверами лучше всего использовать ротацию. Как вы можете видеть, с помощью Web Unlocker это сканирование стоит 0,23 доллара. При домашнем подключении она составила 0,05 доллара, а при подключении к дата-центру – всего 0,01 доллара.
При управлении прокси-серверами с помощью Ghost Cursor и Puppeteer используйте прокси-серверы центра обработки данных, если они доступны. Резидентные прокси следует использовать только в тех случаях, когда ваше соединение с центром данных блокируется целевым сайтом.
Заключение
Ghost Cursor – это простой и эффективный способ сделать ваш скрапер более человечным. Когда ваши прокрутки и клики выглядят более естественно, вы с меньшей вероятностью будете заблокированы на целевом сайте. Этот инструмент работает с общей интеграцией прокси, но он не совместим с удаленными браузерами.
Для базовых задач скраппинга Ghost Cursor может добавить человечности вашему коду без лишних шаблонов. Ознакомьтесь с продуктами для скраппинга, упомянутыми в этой статье, чтобы повысить уровень своего скраппинга уже сегодня.
- Web Unlocker: Автоматизированное решение CAPTCHA и управление прокси. Просто подключите его и продолжайте кодить.
- Браузер для скрапинга: Удаленный просмотр с управляемыми прокси-серверами и решателем CAPTCHA.
- Прокси-серверы для жилых помещений: Направляйте свой трафик через реальные домашние интернет-соединения на потребительских устройствах. Смешивайтесь с лучшим трафиком.
- Прокси дата-центров: высококлассное оборудование с молниеносными соединениями. Соскабливание промежуточных сайтов по низкой цене.
Запишитесь на бесплатную пробную версию и начните работу уже сегодня!