Python-无法使用htmlunitdriver与Selenium独立服务器创建会话 - java

我正在尝试将selenium远程独立服务器与带有Python脚本的htmlUnit驱动程序一起使用。
首先,我使用htmlUnit驱动程序启动独立服务器

java -cp htmlunit-driver-2.35.1-jar-with-dependencies.jar -jar selenium-server-standalone-3.141.0.jar

  09:28:31.731 INFO [GridLauncherV3.parse]-Selenium服务器版本:3.141.0,修订版:2ecb7d9a
  09:28:31.810 INFO [GridLauncherV3.lambda $ buildLaunchers $ 3]-在端口4444上启动独立的Selenium服务器
  2019-05-08 09:28:31.857:INFO :: main:将初始化的@ 317ms登录到org.seleniumhq.jetty9.util.log.StdErrLog
  09:28:32.059 INFO [WebDriverServlet。]-初始化WebDriverServlet
  09:28:32.543信息[SeleniumServer.boot]-Selenium服务器已启动并在端口4444上运行

之后,我尝试在pyhton脚本中使用htmlunit驱动程序

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.common.keys import Keys
driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',desired_capabilities={'browserName': 'htmlunit', 'version': '2','javascriptEnabled': True})
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()

但是我收到这个错误

  selenium.common.exceptions.SessionNotCreatedException:消息:无法从{创建会话
    “ desiredCapabilities”:{
      “ browserName”:“ htmlunit”,
      “ javascriptEnabled”:是的,
      “ version”:“ 2”
    },
    “功能”:{
      “ firstMatch”:[
        {
          “ browserName”:“ htmlunit”
        },
        {
          “ browserName”:“ htmlunit”,
          “ browserVersion”:“ 2”
        }
      ]
    }
  }
  构建信息:版本:'3.141.0',修订版本:'2ecb7d9a',时间:'2018-10-31T20:22:52'
  系统信息:主机:'DESKTOP-xxxx',ip:'xxx.xxx.xxx.xxx',操作系统名称:'Windows 10',os.arch:'amd64',os.version:'10 .0',java。版本:“ 1.8.0_212”
  驱动程序信息:driver.version:未知
  堆栈跟踪:
      在org.openqa.selenium.remote.server.NewSessionPipeline.lambda $ null $ 4(NewSessionPipeline.java:76)
      在java.util.Optional.orElseThrow(无:-1)
      在org.openqa.selenium.remote.server.NewSessionPipeline.lambda $ createNewSession $ 5(NewSessionPipeline.java:75)
      在java.util.Optional.orElseGet处(无:-1)
      在org.openqa.selenium.remote.server.NewSessionPipeline.createNewSession(NewSessionPipeline.java:73)
      在org.openqa.selenium.remote.server.commandhandler.BeginSession.execute(BeginSession.java:65)
      在org.openqa.selenium.remote.server.WebDriverServlet.lambda $ handle $ 0(WebDriverServlet.java:235)
      在java.util.concurrent.Executors $ RunnableAdapter.call中(无:-1)
      在java.util.concurrent.FutureTask.run(无:-1)
      在java.util.concurrent.ThreadPoolExecutor.runWorker(无:-1)
      在java.util.concurrent.ThreadPoolExecutor $ Worker.run(无:-1)
      在java.lang.Thread.run(无:-1)

我似乎正确地遵循了文档,但是我不知道错误可能在哪里。你能告诉我如何解决这个问题吗?

谢谢

参考方案

根据java command line documentation:

  使用-jar选项时,指定的JAR文件是所有用户类的源,而其他类路径设置将被忽略。

因此,您需要修改用于启动Selenium Grid的命令,使其看起来像:

java -cp "htmlunit-driver-2.35.1-jar-with-dependencies.jar;selenium-server-standalone-3.141.59.jar" org.openqa.grid.selenium.GridLauncherV3

我还建议更改此行:

driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',desired_capabilities={'browserName': 'htmlunit', 'version': '2','javascriptEnabled': True})

对此:

driver = webdriver.Remote(command_executor='http://127.0.0.1:4444/wd/hub',desired_capabilities=webdriver.DesiredCapabilities.HTMLUNITWITHJS)

这样,您的脚本就有更好的机会幸免于将来的库升级

Java:找到特定字符并获取子字符串 - java

我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…

python-构造函数中的另一个类 - java

我是Python的新手,我很难理解如何在Python中执行以下操作(例如,在Java中的操作方式)class Person{ private String name; private Address address; public Person(String xyz, Address a) { this.name = xyz; this.address = …

javan使用python脚本安装 - java

我是python脚本的新手,我需要使用python脚本安装Java。请提出一种执行此操作的方法。谢谢大家 参考方案 如果我没有记错,您正在寻找Java的静默安装。这是一个解释相同的链接:Silent installation of Java接下来,您将要使用python运行此命令。为此,您可以在python中使用子进程。以下是解释它的链接:Using sub…

如何从Java执行python脚本? - java

我有一个python脚本,需要从Java运行python脚本。这该怎么做? 参考方案 一种选择是使用jython(用Java编写的Python)。如果不合适,则可以使用Runtime.exec()派生/执行脚本过程。但是,使用它可能有点麻烦,请查看this article中常见的陷阱。

Java内部不整洁? - java

是否可以在Java项目中使用Scrapy?以Jython为例,或者也许是“间接”解决方案。 参考方案 我怀疑您可以在jython下运行扭曲,而scrapy是基于扭曲的。不确定要做什么,但是我建议运行scrapyd并使用Web服务接口与Java进行通信。您能为我们提供您想要实现的更多详细信息吗?