Selenium使用代理启动FirefoxDriver报Cannot start the driver service错误求助
报错原因及解决方案
你遇到的OpenQA.Selenium.WebDriverException: 'Cannot start the driver service on http://localhost:xxxx/'报错是火狐驱动(Geckodriver)启动失败导致,可按以下步骤逐一排查解决:
1. 确认浏览器和驱动版本匹配
Firefox浏览器和Geckodriver有严格的版本对应关系,版本不兼容会直接导致驱动启动失败。你可以查看当前本机安装的Firefox版本,下载对应版本的Geckodriver替换项目里的驱动文件即可。
2. 手动指定驱动启动端口
报错里的端口是驱动随机选择的本地端口,有可能被其他进程占用导致启动失败。你可以手动指定未被占用的端口启动驱动,修改驱动初始化代码:
FirefoxDriverService firefoxDriverService = FirefoxDriverService.CreateDefaultService(); firefoxDriverService.HideCommandPromptWindow = true; // 新增这行,指定一个未被占用的端口即可 firefoxDriverService.Port = 23945;
3. 修正带身份验证的代理配置
你当前的代理配置方式是错误的:Selenium原生的Proxy类配置火狐代理时,不支持直接传递身份验证的用户名密码,会导致浏览器启动时卡住,驱动等待超时抛出报错。
你可以直接用火狐的偏好配置写入代理信息,同时省去后面用AutoIt输入代理账号密码的步骤,替换你原代码中代理配置部分的内容即可:
string proxyIp = "xxx.xxx.xxx.xxx"; string proxyUsername = "my_user_name"; string proxyPassword = "my_password"; string proxyPort = "xxxx"; // 直接通过火狐偏好设置配置带验证的代理 firefoxOptions.SetPreference("network.proxy.type", 1); firefoxOptions.SetPreference("network.proxy.http", proxyIp); firefoxOptions.SetPreference("network.proxy.http_port", int.Parse(proxyPort)); firefoxOptions.SetPreference("network.proxy.ssl", proxyIp); firefoxOptions.SetPreference("network.proxy.ssl_port", int.Parse(proxyPort)); firefoxOptions.SetPreference("network.proxy.ftp", proxyIp); firefoxOptions.SetPreference("network.proxy.ftp_port", int.Parse(proxyPort)); // 写入代理账号密码 firefoxOptions.SetPreference("network.proxy.username", proxyUsername); firefoxOptions.SetPreference("network.proxy.password", proxyPassword); firefoxOptions.SetPreference("network.proxy.no_proxies_on", "localhost, 127.0.0.1"); // 自动完成代理验证,不需要手动输入 firefoxOptions.SetPreference("signon.autologin.proxy", true); firefoxOptions.AddArgument("ignore-certificate-errors");
4. 检查运行权限和安全软件拦截
- 启动项目前右键IDE(如Visual Studio)选择「以管理员身份运行」,权限不足会导致驱动无法绑定本地端口
- 临时关闭本机防火墙、杀毒软件,确认是否是安全软件拦截了驱动的端口绑定操作
内容的提问来源于stack exchange,提问作者Büşra Duygu
相关产品推荐
相关产品推荐

