Вопрос или проблема
Я пытаюсь получить номера телефонов из объявлений на leboncoin.fr с помощью веб-скрапера, но мне нужно быть авторизованным, чтобы это сделать. Есть кнопка, которая позволяет нажать на нее, чтобы открыть номер. Когда вы нажимаете на кнопку и вы авторизованы, номер телефона извлекается с сервера и отображается, в противном случае вас перенаправляют на страницу входа. Моя задача – как сделать так, чтобы бот был авторизован. Код работает идеально и получает HTML-содержимое, но поскольку я не авторизован, нажатие не показывает номер. Вы можете ознакомиться со страницей здесь https://www.leboncoin.fr/ad/voitures/2858300144
const scrapfly = new ScrapflyClient({
key: "MY-API-KEY",
});
const result = await scrapfly.scrape(
new ScrapeConfig({
url: "https://www.leboncoin.fr/ad/voitures/2858300144",
asp: true, // включить обхождение блокировок скрапера
render_js: true,
js_scenario: [
{
click: {
selector:
"document.querySelector('button[title=\\'voir le numéro\\']').click()",
},
},
],
})
);
// получить данные результата скрапа
console.log(result.result.content);
await writeFile("./hello.html", result.result.content);
// и даже обрабатывать его с помощью CSS-селекторов:
await writeFile("./main.json", JSON.stringify(result.result));
Я пробовал добавлять заголовки из моего авторизованного браузера, но теперь скрапер блокируется системой защиты от ботов на leboncoon.fr
const scrapfly = new ScrapflyClient({
key: "MY-API-KEY",
});
const result = await scrapfly.scrape(
new ScrapeConfig({
url: "https://www.leboncoin.fr/ad/voitures/2858300144",
asp: true, // включить обхождение блокировок скрапера
headers: {
authority: "api.leboncoin.fr",
path: "/api/call-tracking/v1/classified/2858300144/phone?referrerId=bc164284-9789-41f6-90bb-3c70c9b7beef&referrerType=alu",
scheme: "https",
accept: "*/*",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "en-US,en;q=0.9",
authorization: "Bearer jwt",
"content-type": "aplication/json",
cookie:"cpokie value",
origin: "https://www.leboncoin.fr",
riority: "(u = 1), i,",
referer: "https://www.leboncoin.fr/ad/voitures/2858300144",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site",
"user-agent":
"Mozilla/5.0 (X11; Linux aarch64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.188 Safari/537.36 CrKey/1.54.250320",
},
render_js: true,
js_scenario: [
{
click: {
selector:
"document.querySelector('button[title=\\'voir le numéro\\']').click()",
},
},
],
})
);
Ответ или решение
Для успешного выполнения задачи по аутентификации при использовании Scrapfly для доступа к защищенным маршрутам на сайте leboncoin.fr, необходимо учесть несколько ключевых моментов, касающихся процесса аутентификации и взаимодействия с веб-страницами. Давайте разберем пошагово, как это сделать.
Шаг 1: Аутентификация
Перед тем как выполнять запросы к защищенным страницам сайта, вам необходимо пройти процедуру аутентификации. Это может быть реализовано через API сайта, если он предоставляет такой функционал, или через автоматическое заполнение форм.
-
Получение токена аутентификации: Проверьте, есть ли возможность получить токен (например, JWT). Это делается часто путем отправки POST-запроса на конечную точку аутентификации с вашими учетными данными.
const response = await fetch('https://www.leboncoin.fr/api/auth', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ username: 'ваш_логин', password: 'ваш_пароль' }), }); const data = await response.json(); const token = data.token; // Предполагаем, что токен приходит в этом поле
-
Сохранение значения cookie: Многие веб-сайты используют cookies для управления сессией. Убедитесь, что вы сохранили и отправили необходимые cookies наряду с токеном.
Шаг 2: Использование Scrapfly для доступа к защищенным страницам
Теперь, когда у вас есть токен, вам нужно использовать его в запросах, отправляемых Scrapfly. Код может выглядеть примерно так:
const scrapfly = new ScrapflyClient({
key: "MY-API-KEY",
});
const result = await scrapfly.scrape(
new ScrapeConfig({
url: "https://www.leboncoin.fr/ad/voitures/2858300144",
asp: true, // включение обхода блокировок скраперов
headers: {
"Authorization": `Bearer ${token}`, // Добавление токена аутентификации
"Cookie": "ваша_cookie_значение",
// Другие заголовки (если нужно)
},
render_js: true,
js_scenario: [
{
click: {
selector: "document.querySelector('button[title=\\'voir le numéro\\']').click()",
},
},
],
})
);
Шаг 3: Обработка результата
После выполнения запроса вы сможете получить желаемые данные из результата:
console.log(result.result.content);
await writeFile("./hello.html", result.result.content);
await writeFile("./main.json", JSON.stringify(result.result));
Шаг 4: Обход антибот-систем
Если вы сталкиваетесь с блокировками со стороны антибот-системы, рассмотрите следующие рекомендации:
- Изменение User-Agent: Попробуйте использовать различные User-Agent строки для имитации различных браузеров и устройств.
- Рандомизация заголовков: Модифицируйте заголовки, которые отправляются на сервер, чтобы предотвратить баннеры.
- Покупка прозорливыхТОКЕНОВ: Используйте методы ротации IP или прокси для маскировки исходного IP адреса.
Заключение
Эффективная аутентификация при работе с веб-скрапингом требует внимательного подхода к деталям и понимания внутренней архитектуры целевого веб-сайта. Следуя вышеуказанным шагам, вы сможете не только получить доступ к необходимой информации, но и обеспечить высокую степень анонимности при выполнении запросов.