You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux服务器仅支持Headless模式时,如何绕过Cloudflare实现网页抓取?

突破Cloudflare防护:Linux Headless浏览器解决方案

1. 配置Headless浏览器模拟Headful环境

Cloudflare会通过窗口尺寸、自动化标识、GPU状态等浏览器特征区分无头与正常浏览器,可通过以下参数伪装:

Playwright Chromium 示例:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(
        headless="new",  # 新版无头模式更接近真实Headful环境
        args=[
            "--disable-blink-features=AutomationControlled",  # 禁用自动化检测特征
            "--window-size=1920,1080",  # 设置真实桌面窗口尺寸
            "--enable-gpu",  # 服务器有GPU时启用,无GPU可忽略
            "--no-sandbox",  # Linux服务器必备参数
            "--disable-dev-shm-usage"
        ],
        user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"  # 模拟主流浏览器UA
    )
    page = browser.new_page()
    page.goto("https://swappie.com/en/iphone/")
    # 后续业务操作
    browser.close()

Selenium Chrome 示例:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless=new")
options.add_argument("--disable-blink-features=AutomationControlled")
options.add_argument("--window-size=1920,1080")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")

driver = webdriver.Chrome(options=options)
driver.get("https://swappie.com/en/iphone/")
# 后续业务操作
driver.quit()

2. 优化代理策略

普通代理易被Cloudflare标记为爬虫IP,需升级为住宅代理/动态IP代理,并遵循以下规则:

  • 代理地域与目标站点受众匹配(如swappie为欧洲站点,优先选择欧洲住宅IP)
  • 单次会话保持同一IP,避免频繁换IP触发风控
  • 确保代理支持HTTPS且无真实IP泄漏风险

3. 使用反检测工具

Undetected Chromedriver(Selenium专用)

该工具自动修改Chrome的自动化特征,绕过Cloudflare检测:

from undetected_chromedriver import Chrome, ChromeOptions

options = ChromeOptions()
options.add_argument("--headless=new")
options.add_argument("--window-size=1920,1080")
options.add_argument("--no-sandbox")

driver = Chrome(options=options)
driver.get("https://swappie.com/en/iphone/")
# 后续业务操作
driver.quit()

Playwright指纹伪装

手动修改浏览器指纹,模拟真实用户环境:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless="new", args=["--no-sandbox"])
    page = browser.new_page()
    # 禁用webdriver标识
    page.add_init_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
    # 添加常用插件信息
    page.add_init_script("""
        navigator.plugins = [
            {name: 'Chrome PDF Viewer', filename: 'internal-pdf-viewer'},
            {name: 'Widevine Content Decryption Module', filename: 'widevinecdmadapter.dll'}
        ]
    """)
    page.goto("https://swappie.com/en/iphone/")
    # 后续业务操作
    browser.close()

4. 模拟真实用户行为

Cloudflare会监控请求频率与行为模式,需添加以下模拟操作:

  • 随机等待:每次页面跳转后等待2-5秒(避免固定间隔)
  • 页面滚动:执行JavaScript模拟滚动行为
  • 随机点击:偶尔点击页面非关键元素(如导航栏)

示例(Playwright):

import random
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless="new", args=["--no-sandbox"])
    page = browser.new_page()
    page.goto("https://swappie.com/en/iphone/")
    
    # 随机等待
    page.wait_for_timeout(random.randint(2000, 5000))
    
    # 分阶段模拟滚动
    page.evaluate("window.scrollTo(0, document.body.scrollHeight * 0.5)")
    page.wait_for_timeout(random.randint(1000, 2000))
    page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
    
    # 后续业务操作
    browser.close()

5. 保持浏览器版本更新

确保使用最新版Chrome/Chromium,新版无头模式(headless: 'new')修复了大量可被检测的特征,Cloudflare对新版浏览器的检测阈值更低。

内容的提问来源于stack exchange,提问作者Igor Savinkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:07:46