如何在Python的Selenium中每次请求及重连时自动切换带授权随机代理IP?
修复随机带权代理的Selenium代码问题
你的代码无法正常运行主要有两个核心问题,下面是分析和修复后的代码:
问题原因
- ChromeOptions重复复用:你在循环外创建了
chrome_options实例,每次调用proxy_helper.enrich_chrome_options都会往里面添加新的代理配置,导致浏览器启动时配置冲突,无法正确加载代理。 - 代理格式无校验:没有处理
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
相关产品推荐
相关产品推荐

