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

如何在Python的Selenium中每次请求及重连时自动切换带授权随机代理IP?

修复随机带权代理的Selenium代码问题

你的代码无法正常运行主要有两个核心问题,下面是分析和修复后的代码:

问题原因

  1. ChromeOptions重复复用:你在循环外创建了chrome_options实例,每次调用proxy_helper.enrich_chrome_options都会往里面添加新的代理配置,导致浏览器启动时配置冲突,无法正确加载代理。
  2. 代理格式无校验:没有处理proxies.txt里的空行或格式错误的条目,容易触发索引越界异常。

修复后的代码

import random
import time
from selenium import webdriver
from selenium_authenticated_proxy import SeleniumAuthenticatedProxy

def parse_proxy(proxy_str):
    proxy_str = proxy_str.strip()
    # 跳过空行
    if not proxy_str:
        return None
    parts = proxy_str.split(":")
    # 校验代理格式是否为 ip:port:username:password
    if len(parts) != 4:
        print(f"跳过无效代理: {proxy_str}")
        return None
    ip, port, username, password = parts
    return f"{username}:{password}@{ip}:{port}"

# 读取并过滤有效代理
with open("proxies.txt", "r") as f:
    proxies = []
    for line in f.readlines():
        proxy = parse_proxy(line)
        if proxy:
            proxies.append(proxy)

# 检查是否有可用代理
if not proxies:
    raise ValueError("proxies.txt中没有可用的代理,请检查文件内容格式")

for _ in range(1, 4):
    selected_proxy = random.choice(proxies)
    # 每次循环重新创建ChromeOptions,避免配置叠加
    chrome_options = webdriver.ChromeOptions()
    
    proxy_helper = SeleniumAuthenticatedProxy(proxy_url=f"http://{selected_proxy}")
    proxy_helper.enrich_chrome_options(chrome_options)

    driver = webdriver.Chrome(options=chrome_options)
    try:
        driver.get('https://whoer.net/')
        time.sleep(15)
    finally:
        # 确保浏览器关闭,防止资源占用
        driver.quit()

关键修改点

  • 每次循环新建ChromeOptions:彻底避免多次添加代理配置导致的冲突,保证每次启动浏览器都用独立的代理设置。
  • 代理有效性校验:自动跳过空行和格式错误的代理条目,避免运行时抛出索引错误。
  • 资源安全处理:用try-finally包裹浏览器操作,确保即使页面加载出错,浏览器也能正常关闭。
  • 前置检查:启动前确认有可用代理,避免无意义的循环执行。

内容的提问来源于stack exchange,提问作者G-None

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:35:32