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

Python Selenium WebDriver无限循环及代理切换求助(新手)

实现Selenium WebDriver无限循环+每次切换代理的方案

核心实现步骤

  • 用while True:构建无限循环,每次循环完整执行「初始化带新代理的WebDriver → 业务操作 → 销毁WebDriver」流程
  • 提前维护代理列表,每次循环随机选取一个代理,保证每次使用不同代理
  • 加入异常捕获逻辑,避免单次执行失败导致整个程序终止

完整代码示例

from seleniumwire import webdriver
import time
import random
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException, WebDriverException


# 维护你的代理列表,每个元素是seleniumwire支持的代理配置
PROXY_LIST = [
    {
        'proxy': {
            'https': 'proxy1:port',
            'no_proxy': 'localhost,127.0.0.1'
        }
    },
    {
        'proxy': {
            'https': 'proxy2:port',
            'no_proxy': 'localhost,127.0.0.1'
        }
    },
    {
        'proxy': {
            'https': 'proxy3:port',
            'no_proxy': 'localhost,127.0.0.1'
        }
    }
]

# ChromeDriver的绝对路径
CHROME_DRIVER_PATH = 'your_absolute_path'

while True:
    driver = None
    try:
        # 随机选一个代理
        selected_proxy = random.choice(PROXY_LIST)
        # 初始化WebDriver
        driver = webdriver.Chrome(CHROME_DRIVER_PATH, seleniumwire_options=selected_proxy)
        
        # 执行你的业务操作
        driver.get('https://www.google.com')
        driver.implicitly_wait(30)
        
        # 替换成你实际的XPATH
        driver.find_element(by=By.XPATH, value="/XYZXYZ").send_keys("HI")
        # 用随机延迟代替固定sleep,降低反爬风险
        time.sleep(random.randint(3, 6))
        driver.find_element(by=By.XPATH, value="/XYZXYZ").click()
        
    except (NoSuchElementException, WebDriverException) as e:
        # 打印错误信息,方便排查问题
        print(f"执行出错: {str(e)}")
    finally:
        # 无论成功还是失败,都要销毁WebDriver,释放资源
        if driver:
            driver.quit()
            print("本次执行完成,WebDriver已销毁")
        # 可选:两次循环之间加间隔,避免过于频繁请求
        time.sleep(random.randint(2, 4))

关键注意事项

  • 代理有效性:确保PROXY_LIST里的代理都是可用的,无效代理会导致WebDriver初始化失败
  • 资源释放:必须使用driver.quit()而非driver.close(),前者会彻底终止Chrome进程,避免内存泄漏
  • 防反爬优化:固定延迟容易被识别,建议用random.randint()生成随机等待时间;还可以考虑添加User-Agent随机切换
  • 异常扩展:根据实际业务场景,可添加更多异常捕获(如TimeoutException),让程序更健壮

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:45:26