【问题标题】:org.openqa.selenium.WebDriverException: java.io.IOException: unexpected end of stream on Connection while invoking getCookies() with GeckoDriverorg.openqa.selenium.WebDriverException: java.io.IOException: 使用 GeckoDriver 调用 getCookies() 时连接上的流意外结束
【发布时间】:2018-06-26 08:49:00
【问题描述】:

我不断收到这样的错误

org.openqa.selenium.WebDriverException: java.io.IOException: unexpected end of stream on Connection{localhost:13080, proxy=DIRECT hostAddress=localhost/127.0.0.1:13080 cipherSuite=none protocol=http/1.1}

尝试从 Firefox 读取 cookie 时。使用 chrome 可以毫无问题地执行完全相同的操作。使用的端口非常随机,每当我开始新的测试时,我也会分配一个新的端口。指定另一个端口是否应该可以在这里做某事?产生它的代码行是:

driver.manage().getCookies().forEach(cookie -> System.out.println(cookie.toString()));

我想知道这是否是 Firefox 的初始化问题,设置一些值会让我通过它。我做的初始化就是这样的:

FirefoxOptions Foptions = new FirefoxOptions();
Foptions.setBinary("/home/user/firefox/firefox");
Foptions.setCapability("marionette", true);
driver =  new FirefoxDriver(Foptions);

【问题讨论】:

    标签: java selenium firefox selenium-webdriver geckodriver


    【解决方案1】:

    没有错误堆栈跟踪很难分析错误。错误堆栈跟踪将有助于立即调试问题。

    但是这个错误信息...

    org.openqa.selenium.WebDriverException: java.io.IOException: unexpected end of stream on Connection{localhost:13080, proxy=DIRECT hostAddress=localhost/127.0.0.1:13080 cipherSuite=none protocol=http/1.1}
    

    ...暗示当您尝试调用 getCookies() 时引发了 java.io.IOException

    您的主要问题可能是以下之一:

    • 原因 A:当您调用 driver.manage().getCookies() 时,虽然似乎 HTML DOM 已加载,但仍有一些 javaScript/Ajax 调用 处于活动状态cookie。
    • 解决方案:诱导 WebDriverWait 使 元素可点击,如下所示:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#btn_download"))).click()
      
    • 原因 B:根据java.io.IOException: unexpected end of stream on Connection in android,服务器可能会在解析请求时抛出错误并关闭。

      李>
    • 解决方案:交叉检查您是否能够在不与 cookie 混合的情况下访问网页中的元素。
    • 原因 C:另一个原因可能是 geckodriver/marionette 正在使用的端口正被其他一些应用程序/服务 使用。
    • 解决方案:释放 GeckoDriver/Marionette 使用的端口

    【讨论】:

    • 您好,感谢您的回答。原因 A 绝对不是问题。仔细检查等待并通过 javascript (boolean)js.executeScript("return window.jQuery != undefined && jQuery.active==0");。原因 B 也不适用。我可以从页面中抓取任何元素没问题。现在关于原因 C。当我开始测试套件时,端口是随机分配的。关于选择哪个端口并将其设置为首选项的任何建议?
    • 我也尝试过使用 Foptions.addPreference("network.cookie.cookieBehavior", 0);,其中 "0" 表示默认启用所有 cookie,但也没有运气。
    • 无法找到 geckodriver 端口使用情况的任何文档,但在某处已记录在案 Marionette 将侦听端口 2828
    • 谢谢,我试试。我目前使用 FirefoxOptions 启动 FirefoxDriver,但我需要 FirefoxProfile 来设置所需的端口。关于如何将 FirefoxProfile 值转换为 FirefoxOptions 值的任何想法?我知道我可以用 getProfile 做相反的事情,但没有找到任何带有 FirefoxProfile 输入的构造函数。
    【解决方案2】:

    我在 selenium 3.12.0 及更高版本上使用 driver.manage().getCookies() 方法时遇到了同样的问题,将我的 selenium 版本降级到 3.11.0 并且运行良好,该问题在最新版本中引入版本。

    【讨论】:

    • 听起来很有道理。几天后我将不得不再次处理它,所以我会告诉你这是否是问题所在。谢谢
    猜你喜欢
    • 2019-03-14
    • 1970-01-01
    • 2018-09-01
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    相关资源
    最近更新 更多