Undetected-chromedriver遭Cloudflare拦截问题求助
解决AWS Ubuntu容器中爬取Carrefour.fr被Cloudflare拦截的问题
针对你在AWS Ubuntu容器中使用undetected_chromedriver爬取Carrefour.fr时触发Cloudflare验证的问题,结合本地正常、容器异常的差异,给出以下针对性解决方案:
1. 修复Headless模式配置
普通的headless=True容易被Cloudflare检测,改用Chrome官方推荐的新Headless模式,同时指定合理的窗口尺寸(容器默认窗口过小会被标记为异常):
options.add_argument("--headless=new") options.add_argument("--window-size=1920,1080") # 模拟桌面端窗口大小
2. 补充容器环境必需的Chrome参数
Ubuntu容器环境存在资源限制和沙箱问题,添加以下参数避免异常:
options.add_argument("--disable-dev-shm-usage") # 解决容器/dev/shm空间不足问题 options.add_argument("--disable-gpu") # 禁用GPU渲染(Headless模式无需) options.add_argument("--disable-blink-features=AutomationControlled") # 禁用自动化检测标志
3. 固定Chrome User-Agent,避免版本不匹配
你指定了Chrome版本113,但fake_useragent生成的UA可能与该版本不匹配,直接使用对应版本的UA字符串:
# 替换原UA生成代码,使用Chrome 113的标准UA options.add_argument('User-Agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36')
4. 确保容器中Chrome版本与代码指定版本一致
代码中指定了version_main=113,需在Ubuntu容器中安装对应版本的Chrome浏览器:
# 安装Chrome 113的命令示例 wget https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_113.0.5672.126-1_amd64.deb dpkg -i google-chrome-stable_113.0.5672.126-1_amd64.deb apt-get install -f -y
如果容器中Chrome路径非默认,需在options中指定:
options.binary_location = "/usr/bin/google-chrome-stable"
5. 优化代理配置与验证
- 确保代理IP为法国本土IP(Carrefour.fr针对法国用户,异地IP易触发验证)
- 检查代理是否为独享IP,共享IP大概率已被Cloudflare标记
- 验证seleniumwire代理配置是否生效,避免真实IP泄露:
# 可以在请求后打印代理信息确认 for request in driver.requests: if request.response: print("代理IP:", request.proxy)
6. 添加等待逻辑,确保Cloudflare验证完成
容器中网络延迟可能导致验证未完成就获取页面,添加显式等待:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By driver.get(url) # 等待页面加载完成(示例:等待商品列表元素出现,需根据目标页面调整) WebDriverWait(driver, 30).until( EC.presence_of_element_located((By.CLASS_NAME, "product-card")) ) print(driver.page_source)
7. 更新undetected_chromedriver版本
确保容器中安装的undetected_chromedriver版本与Chrome 113兼容,执行更新:
pip install --upgrade undetected-chromedriver
内容的提问来源于stack exchange,提问作者Bernard Van Der Vyver
相关产品推荐
相关产品推荐

