How to fix "WebDriverException: Message: connection refused"?
我正在使用一个非常复杂的设置来测试各种非公开网页。我使用
- 火狐:57.0.1
- 壁虎司机:0.18.0
- nose测试:1.3.7
- selenium:3.8.0
selenium测试通过以下方式创建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | profile = webdriver.FirefoxProfile() profile.set_preference("browser.download.dir", self.downloadpath) profile.set_preference("browser.download.folderList", 2) profile.set_preference("browser.download.useDownloadDir", True) profile.set_preference("browser.download.manager.showWhenStarting", False) profile.set_preference("pdfjs.disabled", True) profile.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/force-download, image/png, text/html, text/plain," "image/tiff, text/csv, application/zip, application/octet-stream") profile.set_preference("browser.download.manager.alertOnEXEOpen", False) profile.set_preference("browser.download.manager.focusWhenStarting", False) profile.set_preference("browser.helperApps.alwaysAsk.force", False) profile.set_preference("browser.download.manager.alertOnEXEOpen", False) profile.set_preference("browser.download.manager.closeWhenDone", True) profile.set_preference("browser.download.manager.showAlertOnComplete", False) profile.set_preference("browser.download.manager.useWindow", False) profile.set_preference("services.sync.prefs.sync.browser.download.manager.showWhenStarting", False) self.driver = webdriver.Firefox(profile, log_path = logfile) |
其中
整个测试套件由 6 个独立的测试用例组成,每个测试用例的设置与上述相同。它们通常运行良好且完整,没有问题。
但如果不对测试或常规设置进行任何更改,测试有时会失败并显示以下错误消息:
1 2 3 4 5 6 7 8 9 10 11 12 13 | File"/root/tests/bsp_usecase_tests/tools/basicsuite.py", line 210, in set_driver_firefox self.driver = webdriver.Firefox(profile, log_path = logfile) File"/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 158, in __init__ keep_alive=True) File"/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 154, in __init__ self.start_session(desired_capabilities, browser_profile) File"/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 243, in start_session response = self.execute(Command.NEW_SESSION, parameters) File"/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py", line 311, in execute self.error_handler.check_response(response) File"/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py", line 237, in check_response raise exception_class(message, screen, stacktrace) WebDriverException: Message: connection refused |
我有两个问题:
附录:
-
当我在
webdriver.Firefox 行之前使用time.sleep(10) 时,错误不再出现。我应该把那条线放在一个while-try-except循环中吗?
您看到的错误是:
1 | WebDriverException: Message: connection refused |
根据文档
1 | exception selenium.common.exceptions.WebDriverException(msg=None, screen=None, stacktrace=None) |
所以
建立的连接
1 | self.driver = webdriver.Firefox(profile, log_path = logfile) |
一种可能的解决方案是提供
1 | self.driver = webdriver.Firefox(firefox_profile=profile, log_path='./Log/geckodriver.log') |
在这里你可以找到一个类似的
同样,正如您提到的
- 前一个会话尚未发布的新会话访问相同的日志文件。
-
GeckoDriver 或Marionette 由前一个会话尚未释放的新会话访问相同的端口号。 - 无法访问 CPU
- 缺乏物理内存
- 缺少交换内存
- 缺少磁盘缓存
- 网络带宽不足
-
Docker Image 内存不足
在这里你可以找到一个类似的
根据上述原因,您需要遵循以下几个步骤:
-
始终使用最新发布的
Selenium-Python 客户端版本,WebDriver variant (GeckoDriver ) 和Web Browser (Firefox Browser ) -
始终在
tearDown() 方法中使用 quit() 以便正确销毁webdriver 和webclient 。 -
Clean 执行Test Suite 前后IDE 的项目工作区。 -
Clear 执行Tests 之前和之后的浏览器缓存 -
定期使用
CCleaner 工具清除包括陈旧的rust_mozprofile directories 在内的操作系统琐事。
What connection is refused here? What is the meaning of the error message
Python webdriver API 和 Firefox 网络浏览器之间的连接。好吧,不是连接本身,而是 webdriver 发送的单个请求被浏览器"拒绝"。请注意,这通过 JSON Wire 协议工作 - JSON over HTTP。
How can I possibly fix this error?
通常,如果出现此类错误,最常见的原因是兼容性问题。换句话说,我怀疑你的
一个快速修复尝试为其他人解决这个或类似错误 - 我发现删除我的
DebanjanB 的回答的"清理项目工作区"部分暗示了这一点,但我只是想分享为我修复它的具体操作。请注意,我没有使用像原始海报那样的测试套件。
我想对我来说发生的事情是,由于我仍在调试的另一部分代码中的错误,我的代码中有以前的
因此我想这个问题也可以通过重命名日志文件或写入不同的日志文件来解决。
我遇到了同样的问题,发现是权限问题。我在 apache 中运行 Selenium,而 apache 文件夹没有正确的权限。 selenium、geckodriver 或 firefox 尝试在
您可以使用以下命令解决此问题:
1 | chmod a+rwx /var/www/ |
上面的命令可以工作,但可能不安全,因为它让每个人都可以访问该文件夹。如果您想让它更安全一点,请尝试:
1 | chown www-data /var/www/ |
这都是快速破解,更好的方法是找出 geckodriver 在文件夹中创建文件的原因,并更改该文件夹设置(我还没有这样做)。