CAPSOLVER
博客
如何解决 DataDome 403 Forbidden Error in Web Scraping | 完整解决方案

如何解决 DataDome 403 Forbidden Error in Web Scraping | 完整解决方案

Logo of CapSolver

Emma Foster

Machine Learning Engineer

05-Jun-2024

遇到DataDome 403 Forbidden错误是网页抓取者常见的挑战。DataDome是一种强大的机器人保护服务,使用先进技术识别和阻止自动化流量。本指南将提供解决DataDome 403 Forbidden错误的全面解决方案,确保您能够不间断地访问所需内容。

目录

  • 什么是DataDome和403 Forbidden错误
  • DataDome 403 Forbidden错误在网页抓取中的原因
  • 如何解决DataDome 403 Forbidden错误
    • 使用Capsolver解决403 Forbidden错误
    • 使用高质量代理
    • 修改设备指纹
    • 监控并调整设置
  • 结论

什么是DataDome和403 Forbidden错误

DataDome 是一个领先的机器人保护和网络安全解决方案,旨在实时检测和缓解自动化威胁。

DataDome的关键特性包括:

  • AI驱动的检测:使用先进的机器学习模型区分人类和机器人流量。
  • 实时保护:持续监控和保护Web应用程序、移动应用程序和API。
  • 全面覆盖:保护包括网站、移动应用程序和API在内的各种数字接触点免受自动化威胁。
  • 自适应安全:不断演变以应对新的和新兴的威胁。

了解403 Forbidden错误

403 Forbidden错误是一个HTTP状态码,表示服务器理解请求但拒绝授权。当涉及DataDome时,此错误通常表示请求被识别为潜在的恶意或来自自动化来源,并且对请求资源的访问被阻止。

是否在反复失败于解决恼人的验证码?

发现无缝自动验证码解决方案,使用Capsolver AI驱动的自动网页解锁技术!

领取您的奖励码以获得顶级验证码解决方案;CapSolver: WEBS。兑换后,每次充值可获得额外5%的奖励,无限次。

DataDome 403 Forbidden错误在网页抓取中的原因

要解决问题,我们首先必须了解其原因。通常,DataDome 403 Forbidden错误发生在DataDome的安全措施检测并阻止网页抓取活动时。这可能是由于以下原因:

  1. IP封锁
    当您频繁抓取网页内容时,您的IP地址可能会被检测并封锁。使用低质量的代理IP也可能导致您的访问请求被403状态码拒绝。为减轻这种情况,请考虑使用高质量的旋转代理来分散您的请求,避免被检测到。

  2. 设备环境检测
    DataDome监控您使用的设备环境,包括GPU信息和Canvas指纹。如果您的设备环境看起来异常,这可能导致您的访问请求被403状态码拒绝。此外,如果您的设备执行任何可疑活动,DataDome可能会永久禁止您的设备。为了避免检测,请确保您的设备环境模拟典型用户设置,并避免任何异常配置或行为。

  3. 无头浏览器检测
    DataDome检查您的浏览器环境以识别无头浏览器。如果您使用Puppeteer或Selenium操作无头浏览器,DataDome会将其识别为异常环境。为绕过此检测,您可以尝试使您的无头浏览器看起来像普通浏览器,通过修改浏览器设置和行为,例如启用JavaScript、设置用户代理字符串、管理Cookie和本地存储等。

如何解决DataDome 403 Forbidden错误

遇到DataDome 403 Forbidden错误可能会阻止您访问所需数据,这可能使网页抓取变得非常令人沮丧。因此,在了解了您为什么会遇到这些问题之后,我们将概述一些有效的方法来解决该问题,并从最有效和最简单的方法开始。

1. 使用Capsolver解决403 Forbidden错误

通常推荐的解决验证码的方法是使用第三方解决方案,这可以通过API植入到您的日常工作流程中,使403错误几乎不可见。最好的解决方案之一是CapSolver,它是一种基于机器学习的验证码识别解决方案,可以在3-5秒内轻松解决DataDome和恼人的403问题。

使用CapSolver解决验证码,Python示例代码如下:

# -*- coding: utf-8 -*-
import requests
import time


api_key = "API_KEY"     # TODO: your api key
proxy = "host:port:name:pass"   # TODO: your proxy
page_url = "https://www.targetsite.com/"   # TODO: target site
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"


def get_token(captcha_url):
    print("call capsolver...")
    data = {
        "clientKey": api_key,
        "task": {
            "type": 'DatadomeSliderTask',
            "websiteURL": page_url,
            "captchaUrl": captcha_url,
            "userAgent": user_agent,
            "proxy": proxy,
        },
    }
    uri = 'https://api.capsolver.com/createTask'
    res = requests.post(uri, json=data)
    resp = res.json()
    task_id = resp.get('taskId')
    if not task_id:
        print("create task error:", res.text)
        return

    while True:
        time.sleep(1)
        data = {"clientKey": api_key, "taskId": task_id}
        res = requests.post('https://api.capsolver.com/getTaskResult', json=data)
        resp = res.json()
        status = resp.get('status', '')
        if status == "ready":
            cookie = resp['solution']['cookie']
            cookie = cookie.split(';')[0].split('=')[1]
            print("successfully got cookie:", cookie)
            return cookie
        if status == "failed" or resp.get("errorId"):
            print("failed to get cookie:", res.text)
            return
        print('solve datadome status:', status)


def format_proxy(px: str):
    if '@' not in px:
        sp = px.split(':')
        if len(sp) == 4:
            px = f'{sp[2]}:{sp[3]}@{sp[0]}:{sp[1]}'
    return {"http": f"http://{px}", "https": f"http://{px}"}


def request_site(cookie):
    headers = {
        'content-type': 'application/json',
        'user-agent': user_agent,
        'accept': 'application/json, text/plain, */*',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-mode': 'cors',
        'sec-fetch-dest': 'empty',
        'referer': page_url,
        'accept-encoding': 'gzip, deflate, br, zstd',
        'accept-language': 'en-US,en;q=0.9',
    }
    if cookie:
        headers['cookie'] = "datadome=" + cookie

    print("request url:", page_url)
    response = requests.get(page_url, headers=headers, proxies=format_proxy(proxy))
    print("response status_code:", response.status_code)
    if response.status_code == 403:
        resp = response.json()
        print("captcha url: ", resp['url'])
        return resp['url']
    else:
        print('cookie is good!')
        return


def main():
    url = request_site("")
    if not url:
        return
    if 't=bv' in url:
        print("blocked captcha url is not supported")
        return
    cookie = get_token(url)
    if not cookie:
        return
    request_site(cookie)


if __name__ == '__main__':
    main()

2. 使用高质量代理

避免低质量代理:使用低质量或免费的代理很容易被DataDome检测并封锁。投资高质量的旋转代理,可以分散您的请求到多个IP地址,以避免被检测到。同时通过定期更换IP地址可以防止任何单个IP因可疑活动而被标记。

3. 修改设备指纹

  • 伪装设备信息:通过修改GPU信息、Canvas指纹和其他硬件细节来伪装您的设备指纹,使其更像普通用户。
  • 避免使用无头浏览器:无头浏览器很容易被检测到。如果必须使用它们,请配置使其看起来像有图形界面的浏览器。这包括设置正确的用户代理字符串、启用图像显示,并确保JavaScript完全正常运行。

4. 监控并调整设置

  • 定期检查变化:DataDome经常更新其检测机制。定期审查和调整您的设置,以保持领先于新的检测方法。
  • 在不同环境中测试:在各种环境中进行测试,看看DataDome如何反应。这可以帮助您识别哪些配置最有效地避免检测。

结论

DataDome是一个强大的网络安全解决方案,提供全面的自动化威胁保护,通常会在检测到可疑活动时导致403 Forbidden错误。通过了解DataDome的操作方式并采用适当的技术模拟合法用户行为,您可以有效地解决这些限制,保持对目标资源的访问。

希望这篇指南能够帮助您解决DataDome 403 Forbidden错误,确保您的网页抓取工作顺利进行。如果您有任何问题或需要进一步的帮助,请随时联系我。

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多