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
相关产品推荐
相关产品推荐

