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

Selenium+PhantomJS报错:目标机器主动拒绝连接问题求助

看起来你遇到的是PhantomJS驱动会话在循环迭代中意外失效的问题,而且要求不能使用quit()方法来解决。我来帮你拆解问题根源并给出可行的修复方案。

问题根源

这个错误本质上是因为你的PhantomJS驱动实例client在经历第一次内部循环的频繁请求、闲置后,底层的HTTP连接被关闭,或者PhantomJS进程意外崩溃了。当你第二次进入外层循环调用search()时,代码还在尝试使用已经失效的驱动会话,所以会抛出连接被拒绝的错误。另外,你代码里的URL拼写错误(wwww.google.com多了一个w)也可能加重驱动的异常状态。

解决方案思路

核心是每次使用驱动前先验证会话是否有效,如果失效就重新初始化驱动实例(不用调用quit(),因为失效的进程会被系统自动回收)。这样既满足了不能用quit()的要求,又能保证每次请求都使用正常的驱动会话。

修改后的完整代码

from selenium import webdriver
import time
import os
from selenium.common.exceptions import WebDriverException

class Account:
    def __init__(self, client):
        self.client = client
        self.foo()

    def foo(self):
        self._ensure_driver_alive()
        self.client.get("https://google.com")

    def _ensure_driver_alive(self):
        """检查驱动会话是否有效,失效则重新初始化"""
        try:
            # 通过获取页面标题来验证驱动是否正常响应
            self.client.title
        except WebDriverException:
            # 重新创建PhantomJS实例,旧的失效进程会被系统自动回收
            self.client = webdriver.PhantomJS()

class User:
    def __init__(self, id):
        self.id = id

    def search(self, account):
        # 使用前先确保驱动存活
        account._ensure_driver_alive()
        # 修正URL拼写错误:wwww -> www
        account.client.get("https://www.google.com")

# 初始化驱动
client = webdriver.PhantomJS()
a = Account(client)
a.foo()

while True:
    someid = input("Input id : ")
    u = User(someid)
    
    while True:
        try:
            u.search(a)
            os.system("cls")
            print("Started.... press ctrl+c to stop")
            time.sleep(1)
        except KeyboardInterrupt:
            break
    
    if input("Search more? (y/n)").lower() == "n":
        break

关键修改点说明

  • 新增_ensure_driver_alive()方法:每次调用get()前,通过尝试获取页面标题来检查驱动是否正常。如果抛出WebDriverException(包含连接拒绝、会话失效等情况),就重新创建PhantomJS实例。
  • 修正URL拼写错误:把wwww.google.com改成www.google.com,避免无效请求导致驱动状态异常。
  • 驱动检查前置:在foo()和search()方法里都先执行驱动有效性检查,确保每次请求都用正常的会话。

额外建议

  1. PhantomJS已经停止维护多年,稳定性和兼容性都很差,如果项目允许,建议替换成Headless Chrome或Headless Firefox,它们的长期支持和稳定性会好很多。
  2. 减少过于频繁的get()请求循环,适当增加time.sleep()的间隔时间,降低驱动的负载,减少会话失效的概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:49:08