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

Selenium 4.11.2用ScraperApi代理报desired_capabilities错误求助

问题解决方案

1. 解决desired_capabilities参数错误

这个错误源于你使用的seleniumwire版本与Selenium 4.11.2不兼容——旧版seleniumwire仍在向WebDriver传递已被弃用的desired_capabilities参数。

修复步骤:

  • 升级seleniumwire到兼容Selenium 4的版本:
    pip install seleniumwire>=5.0.0
    
  • 修正代理配置中的环境变量解析错误(原f-string无法直接解析os.environ["SCRAPERAPI_KEY"]):
    修改proxy_options部分代码:
    import os
    
    scraper_api_key = os.getenv("SCRAPERAPI_KEY")
    proxy_options = {
        'proxy': {
            'http': f'http://scraperapi:{scraper_api_key}@proxy-server.scraperapi.com:8001',        
            'https': f'http://scraperapi:{scraper_api_key}@proxy-server.scraperapi.com:8001',
            'no_proxy': 'localhost,127.0.0.1'
        }
    }
    
  • 升级后的seleniumwire会自动适配Selenium 4的参数格式,无需修改webdriver.Remote的调用逻辑。

2. 代理环境下保留元素等待逻辑

完全可以保留原有的WebDriverWait等待逻辑。代理仅改变请求的网络出口,页面元素的加载状态检测逻辑不受任何影响。甚至因为代理可能导致页面加载速度变慢,保留等待逻辑能更可靠地确保元素加载完成后再执行后续操作,避免出现元素未找到的异常。

你现有代码中的WebDriverWait(selenium_driver, 60).until(EC.presence_of_element_located(...))可以直接复用,无需修改。

3. 解决请求过多及本地请求浪费问题

针对ScrapeOps短时间请求过多:

  • 添加随机请求延迟:在每次页面请求后添加2-5秒的随机延迟,避免触发频率限制:
    import time
    import random
    
    # 在selenium_driver.get(deals_page)后添加
    time.sleep(random.uniform(2, 5))
    
  • 控制并发数:避免同时启动多个WebDriver实例,采用单实例串行请求的方式。
  • 严格遵守代理服务商的频率限制:查看ScrapeOps官方文档,设置符合要求的请求间隔与并发数。

针对本地WebDriver无意义消耗请求:

  • 复用WebDriver实例:不要每次调用get_all_deals_ids都重新启动driver,可以将driver作为参数传入,完成所有爬取任务后再统一退出:
    修改代码示例:
    def get_all_deals_ids(selenium_driver):
        deals_page = "https://www.amazon.it/......."
        try:
            selenium_driver.get(deals_page)
            # 原有爬取逻辑保持不变
        except Exception as e:
            print(e)
            return []
    
    # 使用时:
    driver = start_selenium()
    try:
        result = get_all_deals_ids(driver)
        # 执行其他爬取任务
    finally:
        driver.quit()
    
  • 优化ChromeOptions减少无关请求:
    在chromium_options中添加以下参数,禁用非必要资源加载:
    chromium_options.add_argument("--blink-settings=imagesEnabled=false")
    chromium_options.add_argument("--disable-css")
    # 若页面依赖JavaScript则不要添加下面这行
    chromium_options.add_argument("--disable-javascript")
    
  • 启用ScraperApi会话保持:在代理URL末尾添加&session_id=自定义标识,复用同一个代理IP,减少IP切换带来的额外请求开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:00:17