针对具有参数的/ session的HTTP POST引发的Facebook \ WebDriver Curl错误:{“ desiredCapabilities”}错误

Pat*_*sig 1 php selenium curl google-chrome selenium-chromedriver

我尝试在Debian Jessie上将Selenium和Chromewebdriver与PHP Facebooks Webdriver一起使用。我不知道,但是会议不会开始。

我安装了Java SE Runtime Environment(内部版本1.8.0_161-b12),Java HotSpot™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

结果对我来说似乎还可以。

06:42:17.240信息-Selenium构建信息:版本:'3.9.1',修订版:'63f7b50'06:42:17.241信息-在端口4444上启动独立的Selenium服务器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 hash:82b8fb23f757335bb3329d540ce37a2a2615f0a8 2018-02-09 06:42:17.585:WARN:osjs.SecurityHandler:main:ServletContext @ osjsServletContextHandler @ 3b0143d3 {/,null,STARTING}已发现路径的http方法:/ 2018-02-09 06:42:17.596:INFO:osjsh.ContextHandler:main:已启动osjsServletContextHandler @ 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();
        }
Run Code Online (Sandbox Code Playgroud)

结果我得到了

使用以下参数将HTTP POST抛出到/ session的卷曲错误:{“ 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 INFO-找到处理程序:org.openqa .selenium.remote.server.commandhandler.BeginSession @ 5d018ae5 06:43:58.117 INFO-/ session:在/ session上执行POST(handler:BeginSession)06:43:58.247 INFO-功能包括:Capabilities {browser {browserName:chrome,chromeOptions: {args:[-headless,-window-size = 571,42],二进制文件:/ srv / www / XXXX / buil ...},平台:LINUX} 06:43:58.250信息-功能{browserName:chrome ,chromeOptions:{args:[-headless,-window-size = 571,42],二进制文件:/ srv / www / XXXX / buil ...},平台:LINUX}匹配的类org.openqa.selenium.remote .server.ServicedSession $ Factory(提供者:org.openqa.selenium.chrome.ChromeDriverService),启动ChromeDriver(v2。29459 [0.589]上的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.openqa.selenium.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:91)上的org.seleniumhq.jetty9.io.EofException org.openqa.selenium.remote.server.commandhandler.ExceptionHandler.execute(ExceptionHandler.java:96)上的.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:83)org.openqa.selenium.remoteServlet org.openqa.selenium.remote.server.WebDriverServlet上的.handle(WebDriverServlet.java:258)。位于org.openqa.selenium.remote.server.WebDriverServlet.service(WebDriverServlet.java:121)的javax.servlet.http.HttpServlet.service(HttpServlet.java:707)的doPost(WebDriverServlet.java:161) org.seleniumhq.jetty9.servlet.Servlet.ServletHolder.handle(ServletHolder.java:860)处的.http.HttpServlet.service(HttpServlet.java:790)org.seleniumhq.jetty9.servlet.ServletHandler.doHandle(ServletHandler.java:535) ),位于org.seleniumhq.jetty9.server的org.seleniumhq.jetty9.security.SecurityHandler.handle(SecurityHandler.java:548)的org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:143)处。 org.seleniumhq.jetty9.server.handler的handler.HandlerWrapper.handle(HandlerWrapper.java:132)在org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)在org.seleniumhq.jetty9.server.handler处。org.seleniumhq.jetty9.servlet.ServletHandler.doScope(ServletHandler.java:473)上的ContextHandler.doHandle(ContextHandler.java:1253)在org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)在org.seleniumhq.jetty9.server上的org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)在org.seleniumhq.jetty9.server.handler.ContextHandler.doScope(ContextHandler.java:1155)在org.seleniumhq.jetty9.server org.seleniumhq.jetty9.server.Server.Server.handle(Server.java)上的.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。org.seleniumhq.jetty9.io.FillInterest.fillable(FillInterest.java:102)上的jetty9.io.AbstractConnection $ ReadCallback.succeeded(AbstractConnection.java:279)在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 $ 2.run(QueuedThreadPool.java:626)在org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)在java.lang.Thread .run(Thread.java:748)由以下原因引起:org.seleniumhq.jetty9.io.ChannelEndPoint.flush(ChannelEndPoint.java:292)的org.seleniumhq.jetty9.io.EofException org.seleniumhq.jetty9.io.WriteFlusher 。org.seleniumhq.jetty9.io上的flush(WriteFlusher.java:429).org.seleniumhq.jetty9.io.AbstractEndPoint.write(AbstractEndPoint.java:372)上的riteFlusher.write(WriteFlusher.java:322)上的org.seleniumhq org.seleniumhq.jetty9.util.IteratingCallback.processing(IteratingCallback.java:241)上的.jetty9.server.HttpConnection $ SendCallback.process(HttpConnection.java:800)在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。 org.seleniumhq.jetty9.server.HttpOutput.write(HttpOutput.java:234)上的server.HttpChannel.write(HttpChannel.java:834)org.seleniumhq.jetty9.server.HttpOutput.write(HttpOutput.java:218),位于org.openqa.selenium.remote.server,位于com.google.common.io.ByteStreams.copy(ByteStreams.java:108),位于org.seleniumhq.jetty9.server.HttpOutput.write(HttpOutput.java:535) org.openqa命令的.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:89)位于org.openqa.selenium.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:83) .java:96),位于org.openqa.selenium.remote.server.WebDriverServlet.handle(WebDriverServlet.java:258),位于org.openqa.selenium.remote.server.WebDriverServlet.doPost(WebDriverServlet.java:161)。 org.openqa.selenium.remote.server.WebDriverServlet上的servlet.http.HttpServlet.service(HttpServlet.java:707)。org.seleniumhq.jetty9处javax.servlet.http.HttpServlet.service(HttpServlet.java:790)处的service(WebDriverServlet.java:121)org.seleniumhq.jetty9处的servlet.ServletHolder.handle(ServletHolder.java:860) org.seleniumhq.jetty9.security.SecurityHandler.handle(SecurityHandler.java)上的.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.ScopedHandler.nextHandle(ScopedHandler.java:190),位于org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190),位于org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)。 org.seleniumhq的jetty9.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)org.seleniumhq的jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)位于org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)的jetty9.servlet.ServletHandler.doScope(ServletHandler.java:473)在org.seleniumhq.jetty9.server.handler.ContextHandler.doScope( org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:141)的org.seleniumhq.jetty9.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)的ContextHandler.java:1155) org.seleniumhq.jetty9.server.HttpChannel.handle(HttpChannel.java:347)上的.seleniumhq.jetty9.server.Server.handle(Server.java:530)在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.org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247)的org.seleniumhq.jetty9.io.ChannelEndPoint $ 2.run(ChannelEndPoint.java:124)处。 org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)的org.seleniumhq.jetty9.util.thread的jetty9.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140) java.lang.Thread.run(Thread.java:748)处的QueuedThreadPool $ 2.run(QueuedThreadPool.java:626)原因:java.io.IOException:sun.nio.ch.FileDispatcherImpl.write0(本机方法) )在sun.nio.ch.IOUtil.write(IOUtil.java :)在sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)在sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47) 65)在sun.nio.ch.SocketChannelImpl。在org.seleniumhq.jetty9.io.ChannelEndPoint.flush(ChannelEndPoint.java:270)处写入(SocketChannelImpl.java:471)在org.seleniumhq的org.seleniumhq.jetty9.io.WriteFlusher.flush(WriteFlusher.java:429)处org.seleniumhq.jetty9.io.AbstractEndPoint.write(AbstractEndPoint.java:372)上的.jetty9.io.WriteFlusher.write(WriteFlusher.java:322)org.seleniumhq.jetty9.server.HttpConnection $ SendCallback.process(HttpConnection org.seleniumhq.jetty9.util.IteratingCallback.processing(IteratingCallback.java:241)的org.seleniumhq.jetty9.util.IteratingCallback.iterate(IteratingCallback.iterate(IteratingCallback.java:224)的org.seleniumhq.jetty9的.java:800)。 org.seleniumhq.jetty9.server.HttpChannel.sendResponse(HttpChannel.java:783)的org.seleniumhq.jetty9.server.HttpChannel的server.HttpConnection.send(HttpConnection.java:528)。在org.seleniumhq.jetty9.server.write(HttpChannel.java:834)在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(ServletResponseWrappingHttpResponsese .java:89)位于org.openqa.selenium.remote.server.commandhandler.ExceptionHandler.execute(ExceptionHandler.java:96)上的org.openqa.selenium.remote.server.ServletResponseWrappingHttpResponse.setContent(ServletResponseWrappingHttpResponse.java:83) org.openqa.selenium.remote.server.WebDriverServlet上的org.openqa.selenium.remote.server.WebDriverServlet.handle(WebDriverServlet.java:258)。org.openqa.selenium.remote.server.WebDriverServlet.service(WebDriverServlet.java:121)上的javax.servlet.http.HttpServlet.service(HttpServlet.java:707)上的doPost(WebDriverServlet.java:161) .org.seleniumhq.jetty9.servlet.Servlet.ServletHolder.handle(ServletHolder.java:860)的.http.HttpServlet.service(HttpServlet.java:790)at org.seleniumhq.jetty9.servlet.ServletHandler.doHandle(ServletHandler.java:535) ),位于org.seleniumhq.jetty9.server的org.seleniumhq.jetty9.security.SecurityHandler.handle(SecurityHandler.java:548)的org.seleniumhq.jetty9.server.handler.ScopedHandler.handle(ScopedHandler.java:143)处。 org.seleniumhq.jetty9.server.handler的handler.HandlerWrapper.handle(HandlerWrapper.java:132)在org.seleniumhq.jetty9.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)在org.seleniumhq.jetty9.server.handler处。org.seleniumhq.jetty9.servlet.ServletHandler.doScope(ServletHandler.java:473)上的ContextHandler.doHandle(ContextHandler.java:1253)在org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)在org.seleniumhq.jetty9.server上的org.seleniumhq.jetty9.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)在org.seleniumhq.jetty9.server.handler.ContextHandler.doScope(ContextHandler.java:1155)在org.seleniumhq.jetty9.server org.seleniumhq.jetty9.server.Server.Server.handle(Server.java)上的.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。org.seleniumhq.jetty9.io.FillInterest.fillable(FillInterest.java:102)上的jetty9.io.AbstractConnection $ ReadCallback.succeeded(AbstractConnection.java:279)在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 $ 2.run(QueuedThreadPool.java:626)在org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)在java.lang.Thread .run(Thread.java:748)在org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247)的jetty9.io.ChannelEndPoint $ 2.run(ChannelEndPoint.java:124)在org.seleniumhq.jetty9.util.thread.strategy org.seleniumhq.jetty9.util.thread.QueuedThreadPool $ 2.run(.org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)的.EatWhatYouKill.produce(EatWhatYouKill.java:140) java:626),位于java.lang.Thread.run(Thread.java:748)在org.seleniumhq.jetty9.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247)的jetty9.io.ChannelEndPoint $ 2.run(ChannelEndPoint.java:124)在org.seleniumhq.jetty9.util.thread.strategy org.seleniumhq.jetty9.util.thread.QueuedThreadPool $ 2.run(.org.seleniumhq.jetty9.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)的.EatWhatYouKill.produce(EatWhatYouKill.java:140) java:626),位于java.lang.Thread.run(Thread.java:748)seleniumhq.jetty9.util.thread.QueuedThreadPool $ 2.run(QueuedThreadPool.java:626)在java.lang.Thread.run(Thread.java:748)seleniumhq.jetty9.util.thread.QueuedThreadPool $ 2.run(QueuedThreadPool.java:626)在java.lang.Thread.run(Thread.java:748)

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

Pat*_*sig 5

如果修复版本兼容性。您需要将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();
Run Code Online (Sandbox Code Playgroud)