【问题标题】:Facebook\WebDriver Curl error thrown for http POST to /session with params: {"desiredCapabilities"} error使用参数将 http POST 发送到 /session 时引发 Facebook\WebDriver Curl 错误:{“desiredCapabilities”} 错误
【发布时间】:2018-07-20 10:45:57
【问题描述】:

我尝试在 Debian Jessie 上使用 Selenium 和 Chromewebdriver 和 PHP Facebooks Webdriver。我不知道,但会话不会开始。

我安装了 Java SE 运行时环境(内部版本 1.8.0_161-b12)Java HotSpot(TM) 64 位服务器 VM(内部版本 25.161-b12,混合模式)和 Selenium 版本:'3.9.1',修订版:'63f7b50 ' 和 ChromeDriver (v2.9.248304)。

我通过调用 java -Dwebdriver.chrome.driver/srv/www/XXXX/build/chromedriver -jar selenium-server-standalone-3.9.1.jar 启动 Selenium

结果对我来说似乎没问题。

06:42:17.240 信息 - Selenium 构建信息:版本:'3.9.1',修订: '63f7b50' 06:42:17.241 INFO - 启动独立的 Selenium 服务器 在端口 4444 2018-02-09 06:42:17.378:INFO::main: 日志记录已初始化 @498ms 到 org.seleniumhq.jetty9.util.log.StdErrLog 2018-02-09 06:42:17.536:INFO:osjs.Server:main:jetty-9.4.7.v20170914,构建 时间戳:2017-11-21T12:27:37-09:00,git 哈希: 82b8fb23f757335bb3329d540ce37a2a2615f0a8 2018-02-09 06:42:17.585:WARN:osjs.SecurityHandler:main: ServletContext@o.s.j.s.ServletContextHandler@3b0143d3{/,null,STARTING} 已经发现了路径的http方法:/ 2018-02-09 06:42:17.596:INFO:osjsh.ContextHandler:main: 开始 o.s.j.s.ServletContextHandler@3b0143d3{/,null,AVAILABLE} 2018-02-09 06:42:17.642:INFO:osjs.AbstractConnector:main: 开始 ServerConnector@596c6acf{HTTP/1.1,[http/1.1]}{0.0.0.0:4444} 2018-02-09 06:42:17.643:INFO:osjs.Server:main: 开始@763ms 06:42:17.643 INFO - Selenium Server 已启动并在端口 4444 上运行

如果我按照 PHP 代码运行

try{
            $options = new ChromeOptions();
            $options->setBinary("/srv/www/XXXX/build/chromedriver");
            //$options->addArguments(["--headless", "--window-size=571,42"]);

                /*webdriver.chrome.verboseLogging*/

            $caps = DesiredCapabilities::chrome();
            $caps->setCapability(ChromeOptions::CAPABILITY, $options);
            $caps->setPlatform("Linux");
            $host = 'http://localhost:4444/wd/hub/';

            $driver = RemoteWebDriver::create($host, $caps);

            $driver->get('http://www.ende.de/');
            $driver->quit();

        } catch (\Exception $e){
            echo $e->getMessage();
        }

结果我得到

带有参数的 http POST 到 /session 引发的 Curl 错误: {"desiredCapabilities":{"browserName":"chrome","platform":"Linux","chromeOptions":{"binary":"/srv/www/XXXX/build/chromedriver","args":[" --headless","--window-size=571,42"]}}}

操作在 30001 毫秒后超时,收到 0 个字节

服务器记录这个

2018-02-09 06:43:57.988:INFO:osjshC.ROOT:qtp1712536284-9: org.openqa.selenium.remote.server.WebDriverServlet-4501b7af: 初始化 WebDriverServlet 06:43:58.109 信息 - 找到处理程序: org.openqa.selenium.remote.server.commandhandler.BeginSession@5d018ae5 06:43:58.117 INFO - /session:在 /session 上执行 POST(处理程序: BeginSession) 06:43:58.247 信息 - 能力是:能力 {browserName: chrome, chromeOptions: {args: [--headless, --window-size=571,42],二进制:/srv/www/XXXX/buil...},平台:LINUX} 06:43:58.250 INFO - Capabilities {browserName: 铬, chromeOptions: {args: [--headless, --window-size=571,42], 二进制:/srv/www/XXXX/buil...},平台:LINUX} 匹配 类 org.openqa.selenium.remote.server.ServicedSession$Factory (提供者:org.openqa.selenium.chrome.ChromeDriverService)开始 端口 29459 [0.589] [警告] 上的 ChromeDriver (v2.9.248304):PAC 支持 已禁用,因为没有系统实现正在启动 端口 9515 上的 ChromeDriver (v2.9.248304) 2018-02-09 06:44:58.965:WARN:osjs.HttpChannel:qtp1712536284-9:/wd/hub/session java.lang.RuntimeException:org.seleniumhq.jetty9.io.EofException 在 org.openqa.selenium.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:91) 在 org.openqa.selenium.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:83) 在 org.openqa.selenium.remote.server.commandhandler.ExceptionHandler.execute(ExceptionHandler.java:96) 在 org.openqa.selenium.remote.server.WebDriverServlet.handle(WebDriverServlet.java:258) 在 org.openqa.selenium.remote.server.WebDriverServlet.doPost(WebDriverServlet.java:161) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 在 org.openqa.selenium.remote.server.WebDriverServlet.service(WebDriverServlet.java:121) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在 org.seleniumhq.jetty9.servlet.ServletHolder.handle(ServletHolder.java:860) 在 org.seleniumhq.jetty9.servlet.ServletHandler.doHandle(ServletHandler.java:535) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 在 org.seleniumhq.jetty9.security.SecurityHandler.handle(SecurityHandler.java:548) 在 org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190) 在 org.seleniumhq.jetty9.server.handler.ContextHandler.doHandle(ContextHandler.java:1253) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168) 在 org.seleniumhq.jetty9.servlet.ServletHandler.doScope(ServletHandler.java:473) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166) 在 org.seleniumhq.jetty9.server.handler.ContextHandler.doScope(ContextHandler.java:1155) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 在 org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) 在 org.seleniumhq.jetty9.server.Server.handle(Server.java:530) 在 org.seleniumhq.jetty9.server.HttpChannel.handle(HttpChannel.java:347) 在 org.seleniumhq.jetty9.server.HttpConnection.onFillable(HttpConnection.java:256) 在 org.seleniumhq.jetty9.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279) 在 org.seleniumhq.jetty9.io.FillInterest.fillable(FillInterest.java:102) 在 org.seleniumhq.jetty9.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124) 在 org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247) 在 org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140) 在 org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708) 在 org.seleniumhq.jetty9.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626) 在 java.lang.Thread.run(Thread.java:748) 引起: org.seleniumhq.jetty9.io.EofException 在 org.seleniumhq.jetty9.io.ChannelEndPoint.flush(ChannelEndPoint.java:292) 在 org.seleniumhq.jetty9.io.WriteFlusher.flush(WriteFlusher.java:429) 在 org.seleniumhq.jetty9.io.WriteFlusher.write(WriteFlusher.java:322) 在 org.seleniumhq.jetty9.io.AbstractEndPoint.write(AbstractEndPoint.java:372) 在 org.seleniumhq.jetty9.server.HttpConnection$SendCallback.process(HttpConnection.java:800) 在 org.seleniumhq.jetty9.util.IteratingCallback.processing(IteratingCallback.java:241) 在 org.seleniumhq.jetty9.util.IteratingCallback.iterate(IteratingCallback.java:224) 在 org.seleniumhq.jetty9.server.HttpConnection.send(HttpConnection.java:528) 在 org.seleniumhq.jetty9.server.HttpChannel.sendResponse(HttpChannel.java:783) 在 org.seleniumhq.jetty9.server.HttpChannel.write(HttpChannel.java:834) 在 org.seleniumhq.jetty9.server.HttpOutput.write(HttpOutput.java:234) 在 org.seleniumhq.jetty9.server.HttpOutput.write(HttpOutput.java:218) 在 org.seleniumhq.jetty9.server.HttpOutput.write(HttpOutput.java:535) 在 com.google.common.io.ByteStreams.copy(ByteStreams.java:108) 在 org.openqa.selenium.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:89) 在 org.openqa.selenium.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:83) 在 org.openqa.selenium.remote.server.commandhandler.ExceptionHandler.execute(ExceptionHandler.java:96) 在 org.openqa.selenium.remote.server.WebDriverServlet.handle(WebDriverServlet.java:258) 在 org.openqa.selenium.remote.server.WebDriverServlet.doPost(WebDriverServlet.java:161) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 在 org.openqa.selenium.remote.server.WebDriverServlet.service(WebDriverServlet.java:121) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在 org.seleniumhq.jetty9.servlet.ServletHolder.handle(ServletHolder.java:860) 在 org.seleniumhq.jetty9.servlet.ServletHandler.doHandle(ServletHandler.java:535) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 在 org.seleniumhq.jetty9.security.SecurityHandler.handle(SecurityHandler.java:548) 在 org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190) 在 org.seleniumhq.jetty9.server.handler.ContextHandler.doHandle(ContextHandler.java:1253) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168) 在 org.seleniumhq.jetty9.servlet.ServletHandler.doScope(ServletHandler.java:473) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166) 在 org.seleniumhq.jetty9.server.handler.ContextHandler.doScope(ContextHandler.java:1155) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 在 org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) 在 org.seleniumhq.jetty9.server.Server.handle(Server.java:530) 在 org.seleniumhq.jetty9.server.HttpChannel.handle(HttpChannel.java:347) 在 org.seleniumhq.jetty9.server.HttpConnection.onFillable(HttpConnection.java:256) 在 org.seleniumhq.jetty9.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279) 在 org.seleniumhq.jetty9.io.FillInterest.fillable(FillInterest.java:102) 在 org.seleniumhq.jetty9.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124) 在 org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247) 在 org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140) 在 org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708) 在 org.seleniumhq.jetty9.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626) 在 java.lang.Thread.run(Thread.java:748) 引起: java.io.IOException:管道损坏 sun.nio.ch.FileDispatcherImpl.write0(本机方法)在 sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) 在 sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93) 在 sun.nio.ch.IOUtil.write(IOUtil.java:65) 在 sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471) 在 org.seleniumhq.jetty9.io.ChannelEndPoint.flush(ChannelEndPoint.java:270) 在 org.seleniumhq.jetty9.io.WriteFlusher.flush(WriteFlusher.java:429) 在 org.seleniumhq.jetty9.io.WriteFlusher.write(WriteFlusher.java:322) 在 org.seleniumhq.jetty9.io.AbstractEndPoint.write(AbstractEndPoint.java:372) 在 org.seleniumhq.jetty9.server.HttpConnection$SendCallback.process(HttpConnection.java:800) 在 org.seleniumhq.jetty9.util.IteratingCallback.processing(IteratingCallback.java:241) 在 org.seleniumhq.jetty9.util.IteratingCallback.iterate(IteratingCallback.java:224) 在 org.seleniumhq.jetty9.server.HttpConnection.send(HttpConnection.java:528) 在 org.seleniumhq.jetty9.server.HttpChannel.sendResponse(HttpChannel.java:783) 在 org.seleniumhq.jetty9.server.HttpChannel.write(HttpChannel.java:834) 在 org.seleniumhq.jetty9.server.HttpOutput.write(HttpOutput.java:234) 在 org.seleniumhq.jetty9.server.HttpOutput.write(HttpOutput.java:218) 在 org.seleniumhq.jetty9.server.HttpOutput.write(HttpOutput.java:535) 在 com.google.common.io.ByteStreams.copy(ByteStreams.java:108) 在 org.openqa.selenium.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:89) 在 org.openqa.selenium.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:83) 在 org.openqa.selenium.remote.server.commandhandler.ExceptionHandler.execute(ExceptionHandler.java:96) 在 org.openqa.selenium.remote.server.WebDriverServlet.handle(WebDriverServlet.java:258) 在 org.openqa.selenium.remote.server.WebDriverServlet.doPost(WebDriverServlet.java:161) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 在 org.openqa.selenium.remote.server.WebDriverServlet.service(WebDriverServlet.java:121) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:790) 在 org.seleniumhq.jetty9.servlet.ServletHolder.handle(ServletHolder.java:860) 在 org.seleniumhq.jetty9.servlet.ServletHandler.doHandle(ServletHandler.java:535) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 在 org.seleniumhq.jetty9.security.SecurityHandler.handle(SecurityHandler.java:548) 在 org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190) 在 org.seleniumhq.jetty9.server.handler.ContextHandler.doHandle(ContextHandler.java:1253) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168) 在 org.seleniumhq.jetty9.servlet.ServletHandler.doScope(ServletHandler.java:473) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166) 在 org.seleniumhq.jetty9.server.handler.ContextHandler.doScope(ContextHandler.java:1155) 在 org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 在 org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132) 在 org.seleniumhq.jetty9.server.Server.handle(Server.java:530) 在 org.seleniumhq.jetty9.server.HttpChannel.handle(HttpChannel.java:347) 在 org.seleniumhq.jetty9.server.HttpConnection.onFillable(HttpConnection.java:256) 在 org.seleniumhq.jetty9.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279) 在 org.seleniumhq.jetty9.io.FillInterest.fillable(FillInterest.java:102) 在 org.seleniumhq.jetty9.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124) 在 org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247) 在 org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140) 在 org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708) 在 org.seleniumhq.jetty9.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626) 在 java.lang.Thread.run(Thread.java:748)

我不知道怎么了。我尝试安装chrome但没有效果。也无法通过 Web 界面启动 chrome 会话。我也尝试了不同版本的 Chromewebdriver 和 Selenium。有人知道我错过了什么吗?

【问题讨论】:

    标签: php google-chrome selenium curl selenium-chromedriver


    【解决方案1】:

    根据您提供的错误堆栈跟踪,您的主要错误是:

    java.lang.RuntimeException: org.seleniumhq.jetty9.io.EofException at org.openqa.selenium.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:91)
    

    这意味着在处理 HttpResponse 期间发生了 RuntimeException

    但是您的主要问题是您使用的二进制文件之间的版本兼容性,如下所示:

    • 您使用的是非常古老的 chromedriver=v2.9
    • chromedriver=2.9 的发行说明明确提及以下内容:

    Supports Chrome v31-34

    • 我们不知道您的 Chrome 浏览器 版本,但可能是 v60.x,因为您正尝试使用 headless。

    • 您使用的是 Selenium 版本 3.9.1

    • 我们不知道您的 JDK 版本

    所以ChromeDriver版本(v2.33)和Chrome浏览器版本(v60-62)

    解决方案

    • JDK 升级到最近的级别JDK Version 8 Update 151
    • Selenium 升级到当前级别Version 3.9.1
    • ChromeDriver升级到ChromeDriver v2.35级别。
    • Chrome Browser 保持在v64.x 级别。 (as per ChromeDriver v2.35 release notes)
    • 如果您的 Chrome 浏览器 基础版本较旧,请尝试通过 Revo Uninstaller 卸载 Chrome 浏览器 并安装所需的最新 GA 发布版本的 Chrome 浏览器 .
    • 在您的测试执行之前清除浏览器缓存
    • 在执行您的测试套件之前和之后运行CCleaner 工具。
    • 执行您的Test

    【讨论】:

    • chrome 版本已经是 64.0 但 Chromedriver 版本不正确。我安装了 ChromeDriver v2.35。但这不是解决问题的办法。
    • @PatrickMüssig 你有没有找到解决方案?我遇到了同样的错误...如果可以,您可以添加作为答案吗?
    • 是的,我在此处将解决方案添加为新帖子:link
    【解决方案2】:

    如果您修复了版本兼容性。您需要将 PHP 代码调整为这样才能正常工作

    $options = new ChromeOptions();
            $options->setBinary("/usr/bin/google-chrome");
            $options->addArguments(["--headless","--disable-gpu", "--no-sandbox"]);
    
                /*webdriver.chrome.verboseLogging*/
    
            $caps = DesiredCapabilities::chrome();
            $caps->setCapability(ChromeOptions::CAPABILITY, $options);
            $caps->setPlatform("Linux");
            $host = 'http://localhost:4444/wd/hub/';
    
            $driver = RemoteWebDriver::create($host, $caps);
    
            $driver->get('http://www.ende.de');
            var_dump($driver->getTitle());
            $driver->quit();
    

    【讨论】:

    • 我确认这可行 - 我在 ubuntu Ubuntu 16.04.4 LTS 上使用 Chrome 版本 67.0.3396.87(官方构建)(64 位),ChromeDriver 2.40.565383 在无头模式下没有“-- disable-gpu", "--no-sandbox" 参数,我得到了各种各样的错误。我添加了这些参数和$caps->setPlatform("Linux");,现在它又可以工作了。我真的不知道其中哪些是真正的责任。
    猜你喜欢
    • 1970-01-01
    • 2019-07-12
    • 2019-12-04
    • 2018-06-13
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    相关资源
    最近更新 更多