在Spyder(Anaconda)中用Selenium实现IP轮换失败求排查
解决Selenium Chrome代理IP不生效的问题
我帮你排查出几个关键问题,咱们一步步修复:
1. 代理参数格式错误(最核心问题)
你代码里的代理参数写法有问题:
chrome_options.add_argument(f'--proxy-server = {proxy}')
Chrome的命令行参数不允许--proxy-server和=之间有空格,必须写成无空格的格式,否则Chrome无法正确解析代理配置,自然会用你的真实IP访问。
修正后的写法:
chrome_options.add_argument(f'--proxy-server={proxy}')
2. 确认代理IP的有效性
公开代理IP经常会失效,你可以先手动验证这两个代理是否可用:
- 用curl命令测试(终端执行):
curl -x http://185.199.228.220:7300 https://myexternalip.com/raw
如果返回的不是该代理IP,说明这个代理已经失效,需要更换为可用的代理。
3. 补充Chrome配置避免代理被绕过(可选但推荐)
有时候Chrome会因为系统设置、扩展插件等原因绕过代理,你可以添加这些配置来避免:
chrome_options.add_argument('--no-proxy-server') # 强制不使用系统代理 chrome_options.add_argument('--disable-extensions') # 禁用可能干扰代理的扩展 chrome_options.add_argument('--disable-plugins') # 禁用插件
修正后的完整代码
import random from selenium import webdriver import time ips = ["185.199.228.220:7300", "185.199.231.45:8382"] def rand_proxy(): proxy = random.choice(ips) return proxy def myip_now(): chrome_options = webdriver.ChromeOptions() proxy = rand_proxy() # 修正代理参数格式 chrome_options.add_argument(f'--proxy-server={proxy}') # 添加额外配置防止代理被绕过 chrome_options.add_argument('--no-proxy-server') chrome_options.add_argument('--disable-extensions') chrome_options.add_argument('--disable-plugins') driver = webdriver.Chrome(options=chrome_options) driver.get("https://myexternalip.com/raw") # 打印代理和页面返回的IP,方便调试 print(f"当前使用代理: {proxy}") print(f"页面显示IP: {driver.page_source.strip()}") time.sleep(10) driver.quit() myip_now()
运行修正后的代码,应该就能看到页面显示代理IP了。如果还是不行,优先检查代理是否可用,毕竟公开代理的稳定性确实不高。
内容的提问来源于stack exchange,提问作者Daisy
相关产品推荐
相关产品推荐

