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

循环调用driver.get()触发ConnectionRefusedError[Errno61]问题求助

解决循环遍历URL抓取商品时的ConnectionRefusedError问题

问题根源分析

你的代码出现连接拒绝错误,核心原因在于:

  • 错误复用/销毁浏览器实例:循环内使用with webdriver as driver会在每次循环结束后自动调用driver.quit()关闭浏览器,第二次循环时浏览器进程已终止,无法建立新连接。
  • 重复初始化driver与模块覆盖:代码中先创建driver实例,又将webdriver(模块名)赋值为Chrome实例,导致后续调用逻辑混乱。
  • 依赖固定sleep而非显式等待:硬编码的time.sleep无法保证元素加载完成,同时可能导致请求节奏不合理触发反爬。
  • 无异常处理机制:单个URL抓取失败会直接中断整个流程。

修正后的可行代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd
import csv
import time

# 全局初始化Chrome浏览器,仅创建一次实例
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36')

s = Service(executable_path="/Users/Downloads/chromedriver")
driver = webdriver.Chrome(service=s, options=chrome_options)
wait = WebDriverWait(driver, 15)  # 设置全局显式等待超时

source = 'offsaks.csv'
data_list = []

try:
    # 读取CSV中的URL列表
    with open(source, 'rt', encoding='utf-8-sig') as csvfile:
        readCSV = csv.reader(csvfile, delimiter=',')
        next(readCSV)  # 跳过表头
        urls = [row[1] for row in readCSV]

    # 循环处理每个URL
    for idx, url in enumerate(urls, 1):
        print(f"处理第{idx}个URL: {url}")
        try:
            driver.get(url)
            
            # 显式等待价格元素加载完成
            price = wait.until(
                EC.presence_of_element_located((By.XPATH, '//*[@id="maincontent"]/div[1]/div[2]/div[3]/div/div[1]/div/div/div/span/span[1]/span[2]/span/span'))
            ).text.strip()
            
            # 显式等待标题元素加载完成
            title = wait.until(
                EC.presence_of_element_located((By.XPATH, '//*[@id="maincontent"]/div[1]/div[2]/div[3]/div/h1/span[2]/span/span'))
            ).text.strip()
            
            data_list.append({
                'URL': url,
                'Title': title,
                'Price': price
            })
            print(f"抓取成功: {title} - {price}")
            
            # 控制请求节奏,避免反爬
            time.sleep(3)
            
        except Exception as e:
            print(f"处理URL失败: {str(e)}")
            data_list.append({
                'URL': url,
                'Title': '抓取失败',
                'Price': '抓取失败',
                'Error': str(e)
            })
            continue

finally:
    # 无论流程是否成功,最终关闭浏览器
    driver.quit()
    print("浏览器已关闭")

# 保存结果到CSV
df = pd.DataFrame(data_list)
df.to_csv('test_1.csv', index=False)
print("结果已保存至test_1.csv")

关键修改说明

  • 单实例复用浏览器:在循环外创建浏览器实例,循环内持续复用,避免重复启动/关闭导致的连接问题。
  • 显式等待替代固定sleep:通过WebDriverWait等待元素加载完成,既保证稳定性又节省不必要的等待时间。
  • 异常捕获与容错:单个URL抓取失败时记录错误信息,不中断整个循环流程。
  • 反爬优化:添加User-Agent、控制请求间隔,降低被目标网站拦截的概率。
  • 结果完整性:保存原始URL与错误信息,方便后续排查问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:20:41