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

如何在Colab中用Selenium绕过Cloudflare提取44K JSON数据?

问题

需要高效提取https://www.kartanarusheniy.org/messages页面展示的数据,这些数据来自约44K个JSON文件,可通过ID号访问https://www.kartanarusheniy.org/api/messages/{ID}接口获取(例如https://www.kartanarusheniy.org/api/messages/1、https://www.kartanarusheniy.org/api/messages/3)。但该站点有Cloudflare防护,直接下载无法实现。

已尝试在Google Colab上运行Selenium代码:

!apt update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium

from selenium import webdriver
import pandas as pd

options = webdriver.ChromeOptions()
options.add_argument("--headless")
options.add_argument('--no-sandbox')
options.add_argument("--enable-javascript")
options.add_argument('--disable-dev-shm-usage')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
driver = webdriver.Chrome(options=options)

i = 1
while i < 10:
  url = "https://www.kartanarusheniy.org/api/messages" + str(i)
  filename = str(i) + ".json"
  #session_obj = requests.Session ()
  getter = driver.get(url)
  saver = driver.page_source
  print(saver)
  i += 1

运行后得到Cloudflare安全验证页面,提示“Checking if the site connection is secure”“Enable JavaScript and cookies to continue”。此外还尝试过undetected_chromedriver和selenium_stealth工具,但仍无法绕过防护。

可行解决方案

  • 使用Playwright模拟真实浏览器行为
    普通Selenium类工具在Colab环境下的特征容易被识别,试试Playwright——它默认会模拟更贴近真实用户的浏览器指纹,包括随机化行为特征。在Colab中安装后,配置合理的浏览器参数并添加等待时间,让Cloudflare验证流程完成。示例代码框架:

    !pip install playwright
    !playwright install chromium
    
    from playwright.sync_api import sync_playwright
    import time
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True, args=["--no-sandbox", "--disable-dev-shm-usage"])
        context = browser.new_context(
            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",
            viewport={"width": 1920, "height": 1080}
        )
        page = context.new_page()
        for i in range(1, 10):
            url = f"https://www.kartanarusheniy.org/api/messages/{i}"
            page.goto(url)
            # 等待Cloudflare验证完成,可根据页面状态调整等待逻辑
            page.wait_for_load_state("networkidle")
            time.sleep(2)
            content = page.content()
            # 处理并保存JSON内容
            print(content)
        browser.close()
    
  • 尝试合规数据获取渠道
    查看站点是否提供官方API密钥、数据导出服务或开放数据接口,很多站点会对合规的数据请求开放权限。可以检查站点的robots.txt文件、开发者文档,或直接联系站点管理员确认合法获取数据的途径,这是最稳定且无风险的方式。

  • 住宅代理+请求库组合
    使用住宅代理(而非数据中心代理)搭配requests或httpx库,每次请求随机化请求头(User-Agent、Accept等),并添加随机延迟模拟人类访问节奏。示例:

    import requests
    import random
    import time
    
    proxies = {
        "http": "http://你的住宅代理地址:端口",
        "https": "https://你的住宅代理地址:端口"
    }
    
    user_agents = [
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 13_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.5 Safari/605.1.15",
        # 补充更多真实用户的User-Agent
    ]
    
    for i in range(1, 10):
        headers = {
            "User-Agent": random.choice(user_agents),
            "Accept": "application/json, text/javascript, */*; q=0.01",
            "Referer": "https://www.kartanarusheniy.org/messages"
        }
        url = f"https://www.kartanarusheniy.org/api/messages/{i}"
        try:
            response = requests.get(url, headers=headers, proxies=proxies)
            if response.status_code == 200:
                print(response.json())
            else:
                print(f"ID {i} 请求失败,状态码: {response.status_code}")
        except Exception as e:
            print(f"ID {i} 请求出错: {e}")
        time.sleep(random.uniform(1, 3))
    
  • 本地环境运行爬虫
    Colab的服务器环境特征容易被Cloudflare标记为非人类访问,换成本地电脑运行undetected_chromedriver或Playwright,本地环境的浏览器指纹更接近真实用户,绕过验证的成功率更高。可以先手动完成一次Cloudflare验证,再复用验证后的Cookie批量请求接口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:55:22