首页 > 解决方案 > Python - 无法使用 htmlunitdriver 创建与 Selenium 独立服务器的会话

问题描述

我正在尝试将 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 INFO [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”:true,“version”:“2”},“capabilities”:{“ firstMatch": [ { "browserName": "htmlunit" }, { "browserName": "htmlunit", "browserVersion": "2" } ] } } 构建信息:版本:'3.141.0',修订:'2ecb7d9a' , 时间: '2018-10-31T20:22:52' 系统信息: 主机: 'DESKTOP-xxxx', ip: 'xxx.xxx.xxx.xxx', os.name: 'Windows 10', os.arch: 'amd64',os.version:'10.0',java.version:'1.8。0_212' 驱动程序信息:driver.version:未知 Stacktrace:在 org.openqa.selenium.remote.server.NewSessionPipeline.lambda$null$4 (NewSessionPipeline.java:76) 在 java.util.Optional.orElseThrow (None:-1)在 org.openqa.selenium.remote.server.NewSessionPipeline.lambda$createNewSession$5 (NewSessionPipeline.java:75) 在 java.util.Optional.orElseGet (None:-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 (None:-1) 在 java.util.concurrent.FutureTask.run (None:-1) 在 java.util.concurrent。ThreadPoolExecutor.runWorker (None:-1) at java.util.concurrent.ThreadPoolExecutor$Worker.run (None:-1) at java.lang.Thread.run (None:-1)

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

谢谢

标签: javapythonselenium

解决方案


根据java命令行文档:

使用该-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)

这样你的脚本就有更好的机会在未来的库升级中幸存下来


推荐阅读