【问题标题】:Trouble Getting Chrome Through Selenium Hub无法通过 Selenium Hub 获取 Chrome
【发布时间】:2012-10-16 01:03:57
【问题描述】:

我正在使用 Selenium Webdriver,2.25 我有一个本地集线器,使用 chrome 和 firefox 的这个 json 设置:

[
    {
        "browserName": "firefox",
        "maxInstances": 5,
        "seleniumProtocol": "WebDriver"
    },
    {
        "browserName": "chrome",
        "maxInstances": 5,
        "seleniumProtocol": "WebDriver"
    }
],

我可以像这样启动 webdriver firefox 会话:

capability = getattr(webdriver.DesiredCapabilities, "FIREFOX")
dd=webdriver.Remote('http://localhost:4444/wd/hub', capability)

效果很好 但如果我尝试像这样启动 Chrome 会话:

capability = getattr(webdriver.DesiredCapabilities, "CHROME")
dd=webdriver.Remote('http://localhost:4444/wd/hub', capability)

我收到此错误:

Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 init 中的文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py”,第 62 行 self.start_session(desired_capabilities, browser_profile) 文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py”,第 104 行,在 start_session 'desiredCapabilities':desired_capabilities, 文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/webdriver.py”,第 155 行,在执行 self.error_handler.check_response(响应) 文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/remote/errorhandler.py”,第 147 行,在 check_response 引发异常类(消息、屏幕、堆栈跟踪) selenium.common.exceptions.WebDriverException:消息:无; Stacktrace:方法 innerGet 在 None 中抛出错误

但我可以像这样直接连接到 Chrome:

dd=webdriver.Chrome()

没有任何问题。

如何通过我的 Selenium Hub 访问 Chrome?

【问题讨论】:

    标签: python selenium webdriver selenium-webdriver


    【解决方案1】:

    我也有同样的问题。

    问题是,与 Firefox 不同,Chrome 需要单独的 chromdriver.exe 来充当浏览器和驱动程序之间的桥梁。

    来自文档:

    ChromeDriver 由三个独立的部分组成。有 浏览器本身(“chrome”),由 Selenium 项目(“驱动程序”)和从 Chromium 项目充当“chrome”和 “司机”。这个可执行文件称为“chromedriver”,但我们会尝试 在此页面中将其称为“服务器”以减少混淆。

    Download chromdriver.exe here

    并将其放入您的 chrome 二进制目录中。

    然后我使用一个 .bat 文件来启动我的集线器和这个列表:

    java -Dwebdriver.chrome.driver="C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe" -jar D:\soft\selenium-server-standalone-2.29.0.jar
    

    然后我在我的 Linux 机器上执行以下 Python 代码,一旦我将 chromedriver.exe 放入 Chrome 目录并使用正确的路径参数启动集线器,它就可以完美运行:

    from selenium import webdriver
    url = "http://192.168.1.115:4444/wd/hub"
    driver = webdriver.Remote(command_executor = url, desired_capabilities = {'browserName':'chrome'})
    driver.get("http://google.com")
    

    希望这可以帮助您和其他人解决同样的问题。找到解决方案当然是不要把 firefox 方法和 RTFM 视为理所当然: Chrome driver documentation

    【讨论】:

      【解决方案2】:

      您需要设置 chrome 驱动程序,有关 here 的信息

      更新


      基于sample json setup file 和第一个链接中提供的步骤,似乎浏览器名称不应该是大写,实际上是小写。

      所以把CHROME改成chrome

      例子

      WebDriver driver = new RemoteWebDriver("http://localhost:9515", DesiredCapabilities.chrome());
      driver.get("http://www.google.com");
      

      在你的情况下,我会假设

      dd=webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.chrome())
      

      【讨论】:

      • webdriver.Chrome() 需要的不是同一个chrome驱动吗?
      • 是的,看来确实如此。如果我重命名 chromedriver 可执行文件,本地 webdriver.Chrome() 将停止工作。把它放回去,它会再次工作。似乎我已经设置了 chromedriver。
      • 是的,正如我在第一行所说的。 2.25
      • oops 抱歉,我最后一次尝试capability = getattr(webdriver.DesiredCapabilities, "chrome") dd=webdriver.Remote('http://localhost:4444/wd/hub', capability),将CHROME 更改为chrome
      • 谢谢,但 DesiredCapabilities 只有“CHROME”,没有“chrome”或“Chrome”。感谢您的尝试。
      猜你喜欢
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多