将Chrome驱动程序与Selenium webdriver一起使用。远程Python

时间:2017-12-01 18:56:33

标签: python python-2.7 selenium-webdriver selenium-chromedriver selenium-grid

我正在尝试使用webdriver.Remote()在节点上启动chrome会话。 我无法启动浏览器。我可以使用webdriver.Chrome()而不是网格。

我的节点和集线器在与客户端相同的本地计算机上运行。

这是Test.py

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import time

driver = webdriver.Remote(
'http://192.168.1.18:4444/wd/hub‘,
   desired_capabilities=webdriver.DesiredCapabilities.CHROME
)
time.sleep(10)
driver.quit()

以下是Test.py失败时的回溯

  Traceback (most recent call last):
  File "RCTest.py", line 8, in <module>
    desired_capabilities=webdriver.DesiredCapabilities.CHROME
  File "/Users/admin/anaconda/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 154, in __init__
    self.start_session(desired_capabilities, browser_profile)
  File "/Users/admin/anaconda/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 243, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "/Users/admin/anaconda/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 311, in execute
    self.error_handler.check_response(response)
  File "/Users/admin/anaconda/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 237, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: cannot parse capability: goog:chromeOptions
from unknown error: cannot parse binary
from unknown error: must be a string
  (Driver info: chromedriver=2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2),platform=Mac OS X 10.12.6 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 2 milliseconds
Build info: version: '3.8.0', revision: '924c4067df', time: '2017-11-30T11:37:19.049Z'
System info: host: 'MacM', ip: '192.168.1.18', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.6', java.version: '9.0.1'
Driver info: driver.version: unknown
Stacktrace:
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0 (NativeConstructorAccessorImpl.java:-2)
    at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance (Constructor.java:488)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable (ErrorHandler.java:214)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed (ErrorHandler.java:166)
    at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$new$0 (JsonWireProtocolResponse.java:53)
    at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$getResponseFunction$2 (JsonWireProtocolResponse.java:91)
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0 (ProtocolHandshake.java:123)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195)
    at java.util.Spliterators$ArraySpliterator.tryAdvance (Spliterators.java:958)
    at java.util.stream.ReferencePipeline.forEachWithCancel (ReferencePipeline.java:127)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel (AbstractPipeline.java:502)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:488)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:474)
    at java.util.stream.FindOps$FindOp.evaluateSequential (FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.findFirst (ReferencePipeline.java:476)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession (ProtocolHandshake.java:126)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession (ProtocolHandshake.java:73)
    at org.openqa.selenium.remote.server.ServicedSession$Factory.apply (ServicedSession.java:232)
    at org.openqa.selenium.remote.server.ActiveSessionFactory.lambda$apply$11 (ActiveSessionFactory.java:167)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195)
    at java.util.stream.ReferencePipeline$11$1.accept (ReferencePipeline.java:375)
    at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:177)
    at java.util.Spliterators$ArraySpliterator.tryAdvance (Spliterators.java:958)
    at java.util.stream.ReferencePipeline.forEachWithCancel (ReferencePipeline.java:127)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel (AbstractPipeline.java:502)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:488)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:474)
    at java.util.stream.FindOps$FindOp.evaluateSequential (FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.findFirst (ReferencePipeline.java:476)
    at org.openqa.selenium.remote.server.ActiveSessionFactory.apply (ActiveSessionFactory.java:170)
    at org.openqa.selenium.remote.server.NewSessionPipeline.lambda$null$1 (NewSessionPipeline.java:44)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195)
    at java.util.Collections$2.tryAdvance (Collections.java:4734)
    at java.util.stream.ReferencePipeline.forEachWithCancel (ReferencePipeline.java:127)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel (AbstractPipeline.java:502)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:488)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:474)
    at java.util.stream.FindOps$FindOp.evaluateSequential (FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.findFirst (ReferencePipeline.java:476)
    at org.openqa.selenium.remote.server.NewSessionPipeline.lambda$createNewSession$2 (NewSessionPipeline.java:47)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195)
    at java.util.stream.DistinctOps$1$2.accept (DistinctOps.java:175)
    at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:177)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:195)
    at java.util.stream.ReferencePipeline$2$1.accept (ReferencePipeline.java:177)
    at java.util.stream.Streams$StreamBuilderImpl.tryAdvance (Streams.java:397)
    at java.util.stream.Streams$ConcatSpliterator.tryAdvance (Streams.java:720)
    at java.util.stream.ReferencePipeline.forEachWithCancel (ReferencePipeline.java:127)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel (AbstractPipeline.java:502)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:488)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:474)
    at java.util.stream.FindOps$FindOp.evaluateSequential (FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.findFirst (ReferencePipeline.java:476)
    at org.openqa.selenium.remote.server.NewSessionPipeline.createNewSession (NewSessionPipeline.java:50)
    at org.openqa.selenium.remote.server.commandhandler.BeginSession.execute (BeginSession.java:77)
    at org.openqa.selenium.remote.server.WebDriverServlet.lambda$handle$0 (WebDriverServlet.java:240)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:514)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
    at java.lang.Thread.run (Thread.java:844)

以下是中心响应:

13:29:28.442 INFO - Trying to create a new session on test slot {seleniumProtocol=WebDriver, se:CONFIG_UUID=5804e13e-503e-4490-99ef-7776c1579caf, browserName=chrome, maxInstances=5, platform=MAC}
13:35:08.137 INFO - Got a request to create a new session: Capabilities {browserName: chrome, version: }
13:35:08.137 INFO - Trying to create a new session on test slot {seleniumProtocol=WebDriver, se:CONFIG_UUID=5804e13e-503e-4490-99ef-7776c1579caf, browserName=chrome, maxInstances=5, platform=MAC}

以下是节点响应:

Found handler: org.openqa.selenium.remote.server.commandhandler.BeginSession@44652a7f
13:35:08.145 INFO - /session: Executing POST on /session (handler: BeginSession)
13:35:08.148 INFO - Capabilities are: Capabilities {browserName: chrome, goog:chromeOptions: {binary: null}, se:CONFIG_UUID: 5804e13e-503e-4490-99ef-777..., version: }
13:35:08.148 INFO - Capabilities {browserName: chrome, goog:chromeOptions: {binary: null}, se:CONFIG_UUID: 5804e13e-503e-4490-99ef-777..., version: } matched class org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)
Starting ChromeDriver 2.33.506106 (8a06c39c4582fbfbab6966dbb1c38a9173bfb1a2) on port 3619
Only local connections are allowed.

即使浏览器没有打开chromedriver仍然会进行LISTENING连接

chromedri 38842 admin    9u  IPv4 0xb74a80d3f95a4bab      0t0  TCP localhost:20917 (LISTEN)

我已经使用以下命令启动了节点:

java -jar selenium-server-standalone-3.8.0.jar -role node -hub http://192.168.1.18:4444/grid/register

和中心:

java -Dwebdriver.chrome.driver='/chromedriver' -jar selenium-server-standalone-3.8.0.jar -role hub

我一直试图让这个工作,我找不到我所缺少的东西。

我正在跑步: Python:2.7.13 硒:3.8

我做错了什么XD

我需要启动Chrome浏览器。

更新:

我仍然没有想到这个购买我从Grid切换到只使用Selenium Standalone并且我已经设法在AWS Ubunutu实例上工作。所以现在,这将有效。我仍然想知道为什么我无法使用Grid。

1 个答案:

答案 0 :(得分:0)

在SeleniumDriver升级后,Chrome选项不再以编程方式设置。

我刚刚回滚了我的SeleniumDriver升级,用我们的测试来测试这个功能 以前的SeleniumDriver版本:2.35.0 它按预期工作。

见这个

https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/7043