Selenium中driver.get()无法在Chrome浏览器打开URL问题求助
问题:ChromeDriver无法建立WebSocket连接,导致driver.get()无法加载URL
我在Eclipse 2023中使用Selenium 4.0.0编写自动化测试代码,ChromeDriver版本为114.0.5735.90,Chrome浏览器版本为114.0.5735.110。执行代码时driver.get("https://www.google.com/")无法在Chrome浏览器中打开指定URL,已尝试重启Chrome浏览器、重装ChromeDriver,问题仍未解决。
测试代码
package selintro; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class Selenium_1 { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe"); WebDriver driver=new ChromeDriver(); driver.get("https://www.google.com/"); //System.out.println(driver.getTitle()); } }
控制台报错信息
Starting ChromeDriver 114.0.5735.90 (386bc09e8f4f2e025eddae123f36f6263096ae49-refs/branch-heads/5735@{#1052}) on port 57431 Only local connections are allowed. Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. ChromeDriver was started successfully. Jun 06, 2023 3:31:06 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C Jun 06, 2023 3:31:06 PM org.openqa.selenium.remote.http.WebSocket$Listener onError WARNING: Invalid Status code=403 text=Forbidden java.io.IOException: Invalid Status code=403 text=Forbidden at org.asynchttpclient.netty.handler.WebSocketHandler.abort(WebSocketHandler.java:92) at org.asynchttpclient.netty.handler.WebSocketHandler.handleRead(WebSocketHandler.java:118) at org.asynchttpclient.netty.handler.AsyncHttpClientHandler.channelRead(AsyncHttpClientHandler.java:78) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:311) at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:432) at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276) at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:833) Exception in thread "main" org.openqa.selenium.remote.http.ConnectionFailedException: Unable to establish websocket connection to http://localhost:51680/devtools/browser/72198e08-28d7-4143-828d-2af82a95767a Build info: version: '4.0.0', revision: '3a21814679' System info: host: 'DESKTOP-B2S003C', ip: '192.168.1.5', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '17.0.7' Driver info: driver.version: ChromeDriver at org.openqa.selenium.remote.http.netty.NettyWebSocket.<init>(NettyWebSocket.java:104) at org.openqa.selenium.remote.http.netty.NettyWebSocket.lambda$create$3(NettyWebSocket.java:137) at org.openqa.selenium.remote.http.netty.NettyClient.openSocket(NettyClient.java:127) at org.openqa.selenium.devtools.Connection.<init>(Connection.java:77) at org.openqa.selenium.chromium.ChromiumDriver.lambda$new$2(ChromiumDriver.java:124) at java.base/java.util.Optional.map(Optional.java:260) at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:122) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:104) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:91) at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:46) at selintro.Selenium_1.main(Selenium_1.java:15)
解决方案
- 升级Selenium版本:Selenium 4.0.0存在WebSocket兼容性问题,升级到4.8.0及以上稳定版,新版本修复了与ChromeDriver 114+的适配问题。
- 使用WebDriverManager管理驱动:手动指定驱动路径易出错,用WebDriverManager自动匹配对应版本的ChromeDriver,避免版本或路径问题。修改代码如下:
需先添加Maven依赖:package selintro; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import io.github.bonigarcia.wdm.WebDriverManager; public class Selenium_1 { public static void main(String[] args) { WebDriverManager.chromedriver().setup(); WebDriver driver = new ChromeDriver(); driver.get("https://www.google.com/"); // 建议添加退出操作,避免驱动进程残留 // driver.quit(); } }<dependency> <groupId>io.github.bonigarcia</groupId> <artifactId>webdrivermanager</artifactId> <version>5.3.2</version> </dependency> - 添加ChromeOptions参数绕过安全限制:若本地安全策略阻止WebSocket连接,可添加启动参数:
package selintro; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.chrome.ChromeOptions; public class Selenium_1 { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver", "C:\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.addArguments("--remote-allow-origins=*"); options.addArguments("--disable-web-security"); WebDriver driver = new ChromeDriver(options); driver.get("https://www.google.com/"); } } - 检查代理设置:若本地使用代理,需在代码中配置对应代理,或关闭代理后重试。
内容的提问来源于stack exchange,提问作者Hamsa veni
相关产品推荐
相关产品推荐

