gpt4 book ai didi

python - 如何修复 "WebDriverException: Message: connection refused"?

转载 作者:IT老高 更新时间:2023-10-28 21:04:06 29 4
gpt4 key购买 nike

我正在使用非常复杂的设置来测试各种非公开网页。我使用 jenkinsdocker 图像中运行 python-selenium 测试。这样,我就完全独立于 jenkins 环境,可以创建自己的环境。在这种环境下,我安装了以下软件:

  • 火狐:57.0.1
  • geckodriver:0.18.0
  • Nose 测试:1.3.7
  • Selenium :3.8.0

selenium 测试通过以下方式创建 WebDriver:

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)

其中 logfileself.downloadpath 是 docker 设置中的两个有效路径。

整个测试套件由 6 个独立的测试用例组成,每个测试用例的设置与上述相同。它们通常运行良好且完整,没有问题。

但是如果没有对测试或常规设置进行任何更改,测试有时会失败并显示以下错误消息:

  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

我有两个问题:

  1. 这里拒绝什么连接?报错信息是什么意思
  2. 我该如何解决这个错误?

附录:

  • 当我在 webdriver.Firefox 行之前使用 time.sleep(10) 时,错误不再出现。我应该把那行放在一个 while-try-except 循环中吗?

最佳答案

您看到的错误是:

WebDriverException: Message: connection refused

根据文档 WebDriverExceptionBase webdriver exception,如下所示:

exception selenium.common.exceptions.WebDriverException(msg=None, screen=None, stacktrace=None)

所以 connection is denied here 意味着 Selenium 无法建立您想要通过的连接:

self.driver = webdriver.Firefox(profile, log_path = logfile)

一种可能的解决方案是提供 logfile 的完整名称以及 logfile逻辑位置(来自 项目级别)如下:

self.driver = webdriver.Firefox(firefox_profile=profile, log_path='./Log/geckodriver.log')

在这里你可以找到一个类似的Discussion

再次,正如你提到的 当我在 webdriver.Firefox 行之前使用 time.sleep(10) 时,错误不再出现,所以我假设有一个 < strong>GeckoDriverFirefox Browser 客户端之前处于事件状态。因此,与@Florent B. 提到的类似,您必须保护您的脚本免受可能来自以下任一情况的 Race Around Condition 的影响:

  • 新 session 访问之前 session 尚未发布的相同日志文件
  • GeckoDriverMarionette 访问相同的端口号上一个 session 尚未发布的 session 。
  • 无法访问 CPU
  • 缺乏物理内存
  • 缺少交换内存
  • 缺少光盘缓存
  • 缺乏网络带宽
  • Docker 镜像 内存不足

在这里你可以找到一个类似的 Discussion

根据上述原因,您需要遵循以下几个步骤:

  • 始终使用最新发布的 Selenium-Python client 版本、WebDriver variant (GeckoDriver) 和 Web Browser (< strong>火狐浏览器)
  • 始终在 tearDown() 方法中使用 quit(),以便 webdriverwebclient 两者都已正确销毁。
  • 在执行 Test Suite 之前和之后,
  • CleanIDE 中的 Project Workspace
  • 在执行 Tests 之前和之后
  • ClearBrowser Cache
  • 定期使用 CCleaner 工具清除操作系统杂务,包括陈旧的 rust_mozprofile directories

关于python - 如何修复 "WebDriverException: Message: connection refused"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47920639/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com