无法通过Selenium 3.4.0启动HtmlUnitDriver的问题求助
Hey,我来帮你排查这个HtmlUnitDriver启动失败的问题~首先得理清一个关键点:HtmlUnitDriver是基于HtmlUnit的无头浏览器实现,它是模拟Chrome的行为逻辑,而非直接调用你本地安装的Chrome 64.0浏览器。如果你的目标是启动真实的Chrome,应该改用ChromeDriver而非HtmlUnitDriver。不过如果确实需要使用HtmlUnitDriver模拟Chrome,咱们来一步步解决:
1. 先检查依赖是否正确引入
Selenium 3.0之后,HtmlUnitDriver不再包含在默认的Selenium核心依赖包里了,你得单独添加对应的依赖:
如果用Maven管理项目,在pom.xml里加这段:
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>htmlunit-driver</artifactId> <version>2.29.0</version> <!-- 这个版本和Selenium 3.4兼容性很好 --> </dependency>
要是手动导jar包,得确保htmlunit-driver-xxx.jar和htmlunit-xxx.jar这些相关依赖都加了,而且版本要和Selenium 3.4匹配上。
2. 指定和你Chrome版本匹配的BrowserVersion
你本地Chrome是64.0.3282.119,但HtmlUnit自带的BrowserVersion.CHROME可能对应旧版本的Chrome,这会导致兼容性问题。咱们手动创建一个更匹配的版本实例:
把你代码里初始化driver的部分改成这样:
// 手动构建匹配Chrome 64.0的BrowserVersion BrowserVersion chrome64 = new BrowserVersion.BrowserVersionBuilder(BrowserVersion.CHROME) .setBrowserVersionString("64.0.3282.119") .setUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36") .build(); driver = new HtmlUnitDriver(chrome64);
3. 别忘了启用JavaScript支持
HtmlUnitDriver默认是禁用JS的,现在大多数网站都依赖JS才能正常运行,这很可能是启动或页面加载失败的原因。记得开启JS:
// 初始化时直接启用JS driver = new HtmlUnitDriver(chrome64, true);
或者初始化之后再设置:
((HtmlUnitDriver) driver).setJavascriptEnabled(true);
4. 移除不必要的依赖干扰
我看到你代码里导入了PhantomJSDriver相关的类,如果没实际用到PhantomJS,建议把对应的依赖删掉,避免依赖冲突影响HtmlUnitDriver的运行。
额外方案:如果你的真实需求是启动本地Chrome浏览器
要是你本来就想启动自己安装的Chrome 64.0,那别用HtmlUnitDriver了,改用ChromeDriver才对,给你个代码示例:
package eclipse; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; public class Unit { public static void main(String[] args){ // 设置ChromeDriver的路径,换成你自己的chromedriver.exe所在路径 System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe"); // 配置Chrome选项,比如Chrome不在默认安装路径的话,指定一下 ChromeOptions options = new ChromeOptions(); options.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"); WebDriver driver = new ChromeDriver(options); driver.get("http://www.google.com"); System.out.println(driver.getTitle()); driver.quit(); // 记得关闭浏览器 } }
这里要注意:ChromeDriver的版本必须和你的Chrome版本对应,Chrome 64.0对应的ChromeDriver版本是2.37,你得下载对应版本的chromedriver才行。
内容的提问来源于stack exchange,提问作者Naveen

