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

如何用Selenium/undetected-selenium绕过Facebook广告库IP封禁(AWS部署)

问题描述

我正在开展一个项目,需要爬取Facebook广告库的数据并上传至AWS服务器。已使用Selenium和undetected-selenium搭建网页爬虫,但遇到Facebook临时封禁IP的问题,提示信息为:

You’re Temporarily Blocked
It looks like you were misusing this feature by going too fast. You’ve been temporarily blocked from using it.

发现即使启用VPN的Chrome隐私窗口,或为Chrome Driver配置代理,仍会收到该封禁提示,仅切换回住宅IP时封禁才会解除。希望在使用Selenium或undetected-selenium与Facebook交互时,实现IP地址的伪装或隐藏,同时将脚本部署在AWS服务器上,但AWS默认IP无法正常运行。

参考代码:

import chromedriver_autoinstaller
import undetected_chromedriver as uc
import time

options = uc.ChromeOptions()
options.add_argument("--disable-notifications")
options.add_argument('--allow-running-insecure-content')
options.add_argument('--ignore-certificate-errors')
options.add_argument('--disable-application-cache')
options.add_argument("--disable-setuid-sandbox")
options.add_argument("--window-size=1920,1080")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--disable-infobars")
options.add_argument("--mute-audio")
options.add_argument("--disable-gpu")
options.add_argument("--no-sandbox")
PROXY = "IP:PORT"
options.add_argument("--proxy-server=%s" % PROXY)
version_main = int(chromedriver_autoinstaller.get_chrome_version().split(".")[0])
driver = uc.Chrome(options=options, version_main=version_main)
driver.get("https://www.facebook.com/ads/library/?active_status=all&ad_type=all&country=ALL&q=restaurants&sort_data[""direction"]=desc&sort_data[mode]=relevancy_monthly_grouped&search_type=keyword_unordered&media_type=all")

# Wait to see the error
time.sleep(10)
driver.quit()
解决方案

1. 改用住宅代理IP

Facebook对数据中心IP(包括AWS云IP、普通VPN IP)的检测极严,这类IP通常被标记为高风险爬虫来源。你已验证住宅IP可正常访问,因此核心方案是切换到带用户名密码认证的住宅代理服务:

  • 避免使用仅提供IP:PORT的无认证代理,这类代理易被多人共享导致集体封禁
  • 通过Chrome扩展实现代理认证,示例代码如下:
    import zipfile
    import undetected_chromedriver as uc
    
    def create_proxy_auth_extension(proxy_host, proxy_port, proxy_username, proxy_password):
        manifest_json = """
        {
            "version": "1.0.0",
            "manifest_version": 2,
            "name": "Proxy Auth",
            "permissions": ["proxy", "tabs", "<all_urls>", "webRequest", "webRequestBlocking"],
            "background": {"scripts": ["background.js"]}
        }
        """
    
        background_js = f"""
        var config = {{
            mode: "fixed_servers",
            rules: {{
                singleProxy: {{scheme: "http", host: "{proxy_host}", port: parseInt({proxy_port})}},
                bypassList: ["localhost"]
            }}
        }};
        chrome.proxy.settings.set({{value: config, scope: "regular"}}, () => {{}});
    
        chrome.webRequest.onAuthRequired.addListener(
            details => {{
                return {{authCredentials: {{username: "{proxy_username}", password: "{proxy_password}"}}}};
            }},
            {{urls: ["<all_urls>"]}},
            ['blocking']
        );
        """
    
        with zipfile.ZipFile("proxy_auth.zip", 'w') as zp:
            zp.writestr("manifest.json", manifest_json)
            zp.writestr("background.js", background_js)
        return "proxy_auth.zip"
    
    # 初始化配置
    options = uc.ChromeOptions()
    proxy_ext = create_proxy_auth_extension("你的代理IP", "端口", "用户名", "密码")
    options.add_extension(proxy_ext)
    # 保留你原有的其他options配置
    driver = uc.Chrome(options=options, version_main=version_main)
    

2. 模拟真实用户行为

Facebook的封禁逻辑不仅依赖IP,还会检测操作模式:

  • 移除--no-sandbox这类可能暴露爬虫的参数(undetected-chromedriver默认已做自动化特征隐藏,无需额外添加异常参数)
  • 替换固定延迟为随机延迟:用time.sleep(random.uniform(3, 8))替代time.sleep(10),模拟用户浏览停顿
  • 添加真实操作模拟:访问页面后执行JavaScript滚动页面、随机点击页面空白区域,避免直接批量爬取
  • 控制请求频率:每分钟最多发起5-10个请求,避免短时间内大量触发速率限制

3. AWS部署优化

  • 不要直接使用AWS默认公网IP,所有请求通过住宅代理转发
  • 为AWS实例分配弹性IP,避免频繁更换IP引发额外检测
  • 选择与住宅代理IP区域接近的AWS实例区域,降低网络延迟,减少被检测概率

4. IP轮换与封禁处理

  • 建立住宅IP池,每完成一定数量的页面爬取后自动切换IP
  • 若触发封禁提示,立即切换IP并延长延迟时间(比如暂停15-30分钟),再恢复请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:33:26