Не удалось загрузить ресурс: сервер ответил со статусом 429 (слишком много запросов) и 404 (не найдено) с ChromeDriver Chrome через Selenium - PullRequest
1 голос
/ 04 мая 2019

Я пытаюсь построить скребок, используя селен в питоне. Selenium webdriver открывает окно и пытается загрузить страницу, но внезапно перестает загружаться. Я могу получить доступ к той же ссылке в моем локальном браузере Chrome.

Вот журналы ошибок, которые я получаю от веб-драйвера:

{'level': 'SEVERE', 'message': 'https://shop.coles.com.au/a/a-nsw-metro-rouse-hill/everything/browse/baby/nappies-changing?pageNumber=1 - Failed to load resource: the server responded with a status of 429 (Too Many Requests)', 'source': 'network', 'timestamp': 1556997743637}

{'level': 'SEVERE', 'message': 'about:blank - Failed to load resource: net::ERR_UNKNOWN_URL_SCHEME', 'source': 'network', 'timestamp': 1556997745338}

{'level': 'SEVERE', 'message': 'https://shop.coles.com.au/149e9513-01fa-4fb0-aad4-566afd725d1b/2d206a39-8ed7-437e-a3be-862e0f06eea3/fingerprint - Failed to load resource: the server responded with a status of 404 (Not Found)', 'source': 'network', 'timestamp': 1556997748339}

Мой сценарий:

from selenium import webdriver
import os

path = os.path.join(os.getcwd(), 'chromedriver')
driver = webdriver.Chrome(executable_path=path)

links = [
    "https://shop.coles.com.au/a/a-nsw-metro-rouse-hill/everything/browse/baby/nappies-changing?pageNumber=1",
    "https://shop.coles.com.au/a/a-nsw-metro-rouse-hill/everything/browse/baby/baby-accessories?pageNumber=1",
    "https://shop.coles.com.au/a/a-nsw-metro-rouse-hill/everything/browse/baby/food?pageNumber=1",
    "https://shop.coles.com.au/a/a-nsw-metro-rouse-hill/everything/browse/baby/formula?pageNumber=1",
]


for link in links:
    driver.get(link)

1 Ответ

1 голос
/ 04 мая 2019

429 Слишком много запросов

HTTP 429 Too Many Requests Код состояния ответа указывает, что пользователь отправил слишком много запросов за определенный промежуток времени («ограничение скорости»). Представления ответа ДОЛЖНЫ включать подробности, объясняющие условие, и МОГУТ содержать заголовок Retry-After, указывающий, сколько времени ждать, прежде чем сделать новый запрос.

Когда сервер подвергается атаке или просто получает очень большое количество запросов от одной стороны, ответ на каждый из них кодом состояния 429 будет потреблять ресурсы. Поэтому серверы не обязаны использовать код состояния 429; при ограничении использования ресурсов может быть более целесообразным просто отбросить соединения или предпринять другие шаги.


404 Не найдено

Код ответа клиента об ошибке HTTP 404 Not Found указывает на то, что сервер не может найти запрошенный ресурс. В браузере это означает, что URL не распознан. В API это также может означать, что конечная точка допустима, но сам ресурс не существует. Серверы также могут отправлять этот ответ вместо 403, чтобы скрыть существование ресурса от неавторизованного клиента. Этот код ответа, вероятно, самый известный из-за его частого появления в сети.

Код состояния 404 не указывает, временно или постоянно отсутствует ресурс. Но если ресурс окончательно удален, вместо статуса 404 следует использовать 410 (Gone). Кроме того, код состояния 404 используется, когда запрошенный ресурс не найден, существует ли он или был 401 или 403, который по соображениям безопасности служба хочет замаскировать.


Анализ

Когда я попробовал ваш блок кода, я столкнулся с похожими последствиями. Если вы посмотрите DOM Tree веб-страницы , вы обнаружите, что довольно много тегов имеют ключевое слово dist . Как пример:

  • <link rel="shortcut icon" type="image/x-icon" href="/wcsstore/ColesResponsiveStorefrontAssetStore/dist/30e70cfc76bf73d384beffa80ba6cbee/img/favicon.ico">
  • <link rel="stylesheet" href="/wcsstore/ColesResponsiveStorefrontAssetStore/dist/30e70cfc76bf73d384beffa80ba6cbee/css/google/fonts-Source-Sans-Pro.css" type="text/css" media="screen">
  • 'appDir': '/wcsstore/ColesResponsiveStorefrontAssetStore/dist/30e70cfc76bf73d384beffa80ba6cbee/app'

Наличие термина dist является четким признаком того, что сайт защищен Bot Management поставщиком услуг Distil Networks и навигация по ChromeDriver обнаруживается и впоследствии блокируется .


Distil

Согласно статье Что-то действительно есть в Distil.it ... :

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

Далее

"One pattern with **Selenium** was automating the theft of Web content", сказал генеральный директор Distil Рами Эссаид в интервью на прошлой неделе. "Even though they can create new bots, we figured out a way to identify Selenium the a tool they're using, so we're blocking Selenium no matter how many times they iterate on that bot. We're doing that now with Python and a lot of different technologies. Once we see a pattern emerge from one type of bot, then we work to reverse engineer the technology they use and identify it as malicious".


Ссылки

Вы можете найти пару подробных обсуждений в:

...