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

Selenium运行报MaxRetryError/WinError10061目标机器主动拒绝连接如何解决

问题原因
  • 核心错误来自你的try-finally代码块逻辑错误:无论WebDriverWait是否成功定位到SENECA01元素,finally块都会执行driver.quit()直接关闭浏览器、断开Selenium驱动连接,后续再调用driver.find_element时已经没有可用的驱动进程,就会抛出连接被拒绝的报错。
  • 次要问题:你使用的presence_of_element_located仅判断元素是否存在于DOM树中,不保证元素可见、可点击,即使等到元素也可能出现点击失效、误点其他元素的情况。
  • 其他语法兼容问题:你使用的find_element_by_*、chrome_options参数在Selenium 4.0+版本中已经被弃用,可能会出现额外警告。
解决方案

修正逻辑,等待到元素可点击后直接操作,所有流程执行完成或出现异常时再统一关闭驱动,修正后的代码如下:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from getpass import getpass
from selenium.webdriver.common.by import By
import time

opt = Options()
opt.add_argument("--disable-infobars")
opt.add_argument("start-maximized")
opt.add_argument("--disable-extensions")
# 1代表允许权限 2代表拒绝权限
opt.add_experimental_option("prefs", {
    "profile.default_content_setting_values.media_stream_mic": 1, 
    "profile.default_content_setting_values.media_stream_camera": 1,
    "profile.default_content_setting_values.geolocation": 1, 
    "profile.default_content_setting_values.notifications": 1 
  })

PATH = "C:\\Users\\me\\AppData\\Local\\Programs\\Python\\Python39\\chromedriver.exe"
# 弃用chrome_options参数,改用options
driver = webdriver.Chrome(executable_path=PATH, options=opt)

try:
    driver.get("https://xxxx.xxx-xxx.org/logon/login")
    print(driver.title)

    username = input("Enter in your username: ")
    password = getpass("Enter your password: ")

    # 统一使用官方推荐的find_element写法
    username_textbox = driver.find_element(By.ID, "username")
    username_textbox.send_keys(username)

    password_textbox = driver.find_element(By.ID, "password")
    password_textbox.send_keys(password)

    login_button = driver.find_element(By.CLASS_NAME, "formstylebut")
    login_button.submit()

    link = driver.find_element(By.LINK_TEXT, "Big Data (CAD)")
    link.click()

    link = driver.find_element(By.LINK_TEXT, "Run a Report")
    link.click()

    # 改用element_to_be_clickable确保元素加载完成、可交互
    element = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.LINK_TEXT, "SENECA01"))
    )
    # 直接使用等待返回的元素点击,无需重复查找
    element.click()

    # 后续下载逻辑可在此处继续编写
except Exception as e:
    print(f"运行出现错误:{e}")
finally:
    # 所有逻辑执行完成/出现异常后再统一关闭驱动
    driver.quit()
核心修改说明
  • 把所有业务流程都包裹在统一的异常捕获块中,仅在流程结束或报错时才关闭驱动,避免提前断开连接
  • 将显式等待的判断条件改为element_to_be_clickable,确保元素完全加载可交互后再执行点击,解决误点其他元素的问题
  • 统一使用Selenium 4.0+官方推荐的元素查找写法,兼容新版本,避免弃用警告
  • 等待到元素后直接使用返回的元素对象执行操作,不需要重复查找元素,减少出错概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:45:10