使用Python Requests访问链接遇403错误,浏览器可正常打开的解决咨询
问题描述
我能在浏览器正常打开链接:
https://www.hapag-lloyd.com/en/online-business/track/track-by-container-solution.html?container=HLBU9517848
但用Python的requests库发起请求时,返回<Response [403]>。查看响应文本,发现包含CAPTCHA验证相关内容,说明网站的Cloudflare安全防护机制触发了验证,需要完成CAPTCHA才能访问:
<p class="display-later" style="display:none;">Please complete following CAPTCHA to get access to the Hapag-Lloyd's website.</p> <p><form id="challenge-form" class="challenge-form managed-form" action="/en/online-business/track/track-by-container-solution.html?container=HLBU9517848&__cf_chl_f_tk=ubmYYNVSxf5CVa3wq85K19Cb6kHn.6V14MgS52EOPpU-1658760627-0-gaNycGzNB70" method="POST" enctype="application/x-www-form-urlencoded"> <div id='cf-please-wait'> <div id='spinner'> <div id="cf-bubbles"> <div class="bubbles"></div> <div class="bubbles"></div> <div class="bubbles"></div> </div> </div> <p data-translate="please_wait" id="cf-spinner-please-wait">Please stand by, while we are checking your browser...</p> <p data-translate="redirecting" id="cf-spinner-redirecting" style="display:none">Redirecting...</p> </div>
最小复现示例
url = "https://www.hapag-lloyd.com/en/online-business/track/track-by-container-solution.html?container=HLBU9517848" headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'} container_data = requests.get(url, proxies={"http":"http://95.66.151.101:8080"}, headers=headers) print(container_data)
解决方案
针对Cloudflare的CAPTCHA防护,常规Header修改无效,可尝试以下几种方案:
1. 使用无头浏览器模拟真实访问
这类工具能完整模拟浏览器环境,执行JavaScript,通过Cloudflare的浏览器检测,甚至可以处理CAPTCHA:
- Selenium:配合ChromeDriver或GeckoDriver,打开真实浏览器(或无头模式)访问目标页面,少量请求可手动完成CAPTCHA,批量请求可结合第三方识别服务。
示例代码:from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--headless=new") options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36") driver = webdriver.Chrome(options=options) driver.get("https://www.hapag-lloyd.com/en/online-business/track/track-by-container-solution.html?container=HLBU9517848") # 此处可添加等待CAPTCHA完成的逻辑,手动或自动 page_source = driver.page_source print(page_source) driver.quit() - Playwright:比Selenium更轻量化,自带浏览器驱动,对Cloudflare的兼容性更好。
2. 使用Cloudflare专用绕过库
cfscrape库能模拟浏览器的JavaScript计算过程,绕过Cloudflare的基础验证(注意:若触发CAPTCHA,该库无法自动处理,需结合识别服务):
- 安装:
pip install cfscrape - 示例代码:
import cfscrape scraper = cfscrape.create_scraper() url = "https://www.hapag-lloyd.com/en/online-business/track/track-by-container-solution.html?container=HLBU9517848" response = scraper.get(url) print(response.status_code) print(response.text)
3. 借助付费服务
- 带Cloudflare绕过的代理:部分代理服务商提供专门的反爬代理,能自动处理Cloudflare验证和CAPTCHA,适合批量请求场景。
- CAPTCHA识别服务:如自动识别图片验证码、滑块验证的服务,可集成到爬虫中自动提交验证结果。
4. 优先使用官方API
先查询Hapag-Lloyd的开发者文档,确认是否有公开的集装箱查询API。使用官方API不仅合法稳定,还能避免反爬问题,是最优解。
内容的提问来源于stack exchange,提问作者Simao
相关产品推荐
相关产品推荐

