无法加载资源:服务器通过Selenium用ChromeDriver Chrome响应状态为429(请求过多)和404(未找到)

时间:2019-05-04 06:08:12

标签: python-3.x selenium google-chrome web-scraping selenium-chromedriver

我正在尝试在python中使用硒构建刮板。 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 个答案:

答案 0 :(得分:1)

429请求太多

HTTP 429 Too Many Requests响应状态代码指示用户在给定的时间内发送了太多请求(“速率限制”)。响应表示应包含说明条件的详细信息,并且可以包含Retry-After头,指示在发出新请求之前要等待多长时间。

当服务器受到攻击或仅收到来自单方的大量请求时,以 429 状态码进行响应将消耗资源。因此,不需要服务器使用429状态代码。当限制资源使用时,最好只是断开连接或采取其他步骤。


404未找到

HTTP 404 Not Found客户端错误响应代码指示服务器找不到请求的资源。在浏览器中,这意味着无法识别URL。在API中,这也可能意味着端点有效,但是资源本身不存在。服务器也可以发送此响应而不是403,以隐藏来自未授权客户端的资源。由于该响应代码经常在网络上出现,因此可能是最著名的响应代码。

状态404并不表示资源是暂时还是永久丢失。但是,如果资源被永久删除,则应使用410 (Gone)而不是404状态。此外,当找不到请求的资源,该资源不存在或者出于安全原因而需要服务的404401时,将使用403状态代码遮罩。


分析

当我尝试使用您的代码块时,我遇到了类似的后果。如果检查DOM Tree中的webpage,您会发现相当多的标签具有关键字 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

根据文章There Really Is Something About Distil.it...

  

Distil通过观察站点行为并识别刮板特有的模式来保护站点免受自动内容抓取机器人的攻击。当Distil在一个站点上识别出一个恶意bot时,它将创建一个列入黑名单的行为配置文件,并将其部署到所有客户。像漫游器防火墙一样,Distil会检测模式并做出反应。

进一步

  

"One pattern with **Selenium** was automating the theft of Web content",Distil首席执行官拉米·埃塞伊(Rami Essai)在上周的一次采访中表示。 "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".


参考

您可以在以下位置找到一些详细的讨论: