Как Обойти Заблокированный Доступ К Страницам С Помощью Chrome В Безголовом Режиме

Некоторые сайты блокируют Chrome в headless-режиме, и мы рассмотрим, как обойти эту блокировку.

Диагностика является ключом ко всем аспектам работы компьютеров и программирования.

Эта статья начинается с того, как самостоятельно справиться с этой проблемой блокировки.

Если вас это не интересует, вы можете сразу перейти в раздел «Решение» в конце статьи.

Если у вас возникли проблемы с безгласным режимом, не забудьте сделать снимок экрана с помощью page.screenshot(), чтобы увидеть, что происходит. Это как минимум сообщит вам, имеете ли вы дело с тем же видимым контентом, который отображается в «обычном» (управляемом) режиме браузера, а также сообщит, если вы застряли на месте из-за неработающего скрипта.

ничего не понимая.



Как обойти заблокированный доступ к страницам с помощью Chrome в безголовом режиме

В этом примере сам сервер даже не отправил соответствующую веб-страницу.

Первоначальный ответ — это страница «Доступ запрещен», и это все, что вы получаете при запуске Chrome в автономном режиме.

Чего вообще не происходит в управляемом режиме.

В процессе диагностики важно определить, что мы знаем и чего не знаем.

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

Это может показаться элементарным, но если не понимать, зачем это нужно, то добиться этого не так-то просто.

Иногда под диагностикой понимают прохождение списка пунктов, но это работает только в том случае, если ошибка уже встречалась ранее.

Что мы знаем? Мы знаем, что браузер сделал один запрос, и мы получили ответ о том, что доступ запрещен.

Исходная страница не была отображена, и браузер не отправлял никаких других запросов.

Это означает, что сервер куда-то пошел строго на основании того, что мы отправили в том первом запросе, и что наша блокировка не имела ничего общего с содержимым страницы.

Это исключает из диагностики все, что происходит после отрисовки страницы, и сужает область диагностики исключительно до запроса.

Сам запрос представляет собой набор битов и байтов, отправленный через Интернет и полученный сервером.



Сравнение заголовков HTTP-запросов

Поскольку (должна быть) небольшая разница между Chrome, работающим в автономном режиме, и Chrome, работающим в «обычном» режиме, логично предположить, что базовый сетевой стек один и тот же, и нет никакой разницы в том, как браузер передает запросы к пакетам.

Это говорит о том, что вам нужно сосредоточиться только на содержании запроса.

Вы можете использовать службу, которая возвращает нам наши HTTP-запросы (служба эха), чтобы найти различия между запросом, сделанным в безгласном режиме, и запросом, сделанным в обычном режиме.

В приведенном ниже сценарии используется http://scooterlabs.com/echo.json чтобы получить ответ JSON, представляющий запрос, полученный сервером.

   

const puppeteer = require('puppeteer'); (async() => { const browser = await puppeteer.launch({ }); const page = (await browser.pages())[0]; const response = await page.goto(' http://scooterlabs.com/echo.json '); console.log(await response.json()); await browser.close(); })()

Запустив его как в безголовом режиме (по умолчанию), так и в «нормальном» режиме (путем добавления headless:false к параметрам запуска), вы можете сравнить вывод консоли, чтобы найти различия, если таковые имеются.



Как обойти заблокированный доступ к страницам с помощью Chrome в безголовом режиме

time_utc – это время, когда мы сделали запрос.

Бывает по-разному, но вряд ли это единственный источник блокировки, если только сайт не блокирует все запросы в определенное время суток.

Заголовок Accept-Язык отсутствует в безголовом режиме.

На самом деле это хороший сигнал о том, что кто-то использует нестандартный браузер (или режим браузера) и что браузер может использовать отсутствие этого заголовка, чтобы заблокировать нас.

Это могло бы быть моим первым предположением, если бы у нас не было последнего другого заголовка – Пользовательский агент .

Пользовательский агент явно выделяется.

Эта разница раскрывает важную деталь, в которой безгласный режим выдает себя с помощью этого заголовка:

Как обойти заблокированный доступ к страницам с помощью Chrome в безголовом режиме

Заголовок для Chrome, управляемого человеком, в основном останется таким же, если вы удалите «Headless».

User-Agent уже давно стал основным и серьезным способом блокировки нежелательного трафика.

Это хорошая отправная точка для ответа на вопрос, получаем ли мы то, что нам нужно.

Блокировка User-Agent теперь считается простой и редко используемой мерой противодействия из-за простоты ее обхода.

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



Решение (много текста, не читал)

Решить проблему блокировки так же просто, как изменить заголовок User-Agent. Его можно переопределить на уровне страницы с помощью метода page.setUserAgent().

Вы можете установить пользовательский агент в агенте для Chrome в «обычном» режиме, который на момент написания статьи выглядит следующим образом: «Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, например Gecko) Chrome / 73.0.3683.75 Сафари/537.36." Вот и все.

Вот почему сам диагностический подход важнее этого решения.

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

Удачи, и не стесняйтесь обращаться ко мне с любыми вопросами! Теги: #Google Chrome #JavaScript #node.js #headless chrome #puppeteer #автоматизация браузера

Вместе с данным постом часто просматривают: