使用Python CloudScraper绕Cloudflare:本地正常虚拟主机报403的原因
问题原因分析及解决建议
以下是导致虚拟主机上出现403错误的可能原因,结合你的代码逐一说明:
代理配置不完整
你的代码仅配置了http协议的代理,但如果目标网站是HTTPS协议,Cloudflare会检测到请求未使用HTTPS代理的异常。需要同时配置https代理,确保请求全程通过代理转发:proxies={ "http": f"http://{proxy_username}:{proxy_password}@{proxy_url}", "https": f"http://{proxy_username}:{proxy_password}@{proxy_url}" }Node.js环境版本不兼容
CloudScraper依赖Node.js执行JS代码绕过Cloudflare验证,虚拟主机上的Node.js版本可能过低或与本地环境差异较大,导致验证逻辑执行失败。检查虚拟主机的Node.js版本,确保满足CloudScraper的最低版本要求(通常建议v14+)。重复请求的逻辑干扰了CloudScraper的自动验证流程
你连续两次发送相同页面的GET请求,还手动传递第一次的cookies,但CloudScraper本身会自动管理会话cookies和验证流程。手动干预可能打乱Cloudflare的验证逻辑,本地环境可能因网络延迟等因素侥幸通过,但虚拟主机环境下检测更严格,直接触发403。建议删除重复请求,仅保留单次请求:response = scraper.get( url + str(number_page), proxies={ "http": f"http://{proxy_username}:{proxy_password}@{proxy_url}", "https": f"http://{proxy_username}:{proxy_password}@{proxy_url}" } )虚拟主机的环境特征被Cloudflare识别
虚拟主机的服务器IP可能已被Cloudflare列入黑名单,或者主机的底层网络特征(如TCP指纹、TLS版本)与真实浏览器差异过大,被判定为爬虫。可以尝试更换代理IP,或者调整browser配置更贴近真实iOS Chrome的特征,比如补充mobile标识或具体的浏览器版本:browser={ "browser": "chrome", "platform": "ios", "desktop": False, "mobile": True, "version": "114.0.0.0" }
内容的提问来源于stack exchange,提问作者Максим Акулов
相关产品推荐
相关产品推荐

