• C2C 模式解析:消费者与消费者之间的电子商务
  • 什么是EAV(Entity-Attribute-Value)模型
  • 什么是闭包表,闭包表详解
  • B2B 模式解析:企业与企业之间的电子商务
  • B2C模式解析:企业与消费者之间的电子商务
  • 电子商务模式概述:B2C、B2B、C2C、C2M、O2O
  • 电商行业的瓶颈与挑战
  • 电子商务的崛起与行业变革
  • uni.downloadFile 使用注意事项
  • uniapp drawImage 加载网络图片
  • getUnlimitedQRCode 获取不限制的微信小程序码
  • uni.addPhoneContact正式发布后,在小程序上点击无反应
  • IIS 400 错误:Bad Request - Invalid URL HTTP Error 400. The request URL is invalid.
  • HTML5+Runtime打包时未添加 Camera 模块,请参考https://ask.dcloud.net.cn/article/283
  • 红冲和红字发票在形式上有什么不同?
  • selenium报错java.io.IOException: Invalid Status code=403 text=Forbidden - 编程那点事

    编程那点事编程那点事

    专注编程入门及提高
    探究程序员职业规划之道!

    selenium报错java.io.IOException: Invalid Status code=403 text=Forbidden

    最近升级了 Chrome 浏览器,在使用 selenium 的时候,突然报错了,具体报错如下:

    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:444)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
    	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
    	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
    	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:333)
    	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:454)
    	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
    	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
    	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
    	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
    	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
    	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:788)
    	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
    	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
    	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
    	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
    	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:834)
    java.lang.ExceptionInInitializerError
    	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
    	at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
    	at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
    	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    	at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    	at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
    	at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38)
    	at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11)
    	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35)
    	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235)
    	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54)
    Caused by: org.openqa.selenium.remote.http.ConnectionFailedException: Unable to establish websocket connection to http://127.0.0.1:9225/devtools/browser/f72f0ca6-6aec-4d12-9eac-661c18e0c7b9
    Build info: version: '4.8.3', revision: 'e5e76298c3'
    System info: os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.17'
    Driver info: driver.version: ChromeDriver
    	at org.openqa.selenium.remote.http.netty.NettyWebSocket.<init>(NettyWebSocket.java:102)
    	at org.openqa.selenium.remote.http.netty.NettyWebSocket.lambda$create$3(NettyWebSocket.java:128)
    	at org.openqa.selenium.remote.http.netty.NettyClient.openSocket(NettyClient.java:107)
    	at org.openqa.selenium.devtools.Connection.<init>(Connection.java:82)
    	at org.openqa.selenium.chromium.ChromiumDriver.lambda$new$2(ChromiumDriver.java:116)
    	at java.base/java.util.Optional.map(Optional.java:265)
    	at org.openqa.selenium.chromium.ChromiumDriver.<init>(ChromiumDriver.java:114)
    	at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:88)
    	at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:84)
    	at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:73)
    	at taobao.TaoBaoSpider.<clinit>(TaoBaoSpider.java:60)
    	... 23 more

    我直接说解决方案吧。

    1、引入jar包:selenium-http-jdk-client

    <dependency>
     <groupId>org.seleniumhq.selenium</groupId>
     <artifactId>selenium-http-jdk-client</artifactId>
     <version>4.5.0</version>
    </dependency>

    2、在代码最前,加上如下代码

    System.setProperty("webdriver.http.factory", "jdk-http-client");

    到这里,又报错了:

    java.lang.UnsupportedClassVersionError: org/openqa/selenium/remote/http/jdk/JdkHttpClient$Factory has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

    简单来说就是 selenium-http-jdk-client 是 55 版本编译的,但是我的环境是 52 版本。

    那这个 55、52是什么意思?其实就是对应的jdk/jrd的版本,具体对应如下:

    49 = Java 5

    50 = Java 6

    51 = Java 7

    52 = Java 8

    53 = Java 9

    54 = Java 10

    55 = Java 11

    56 = Java 12

    57 = Java 13

    58 = Java 14

    59 = Java 15

    60 = Java 16

    61 = Java 17

    62 = Java 18

    63 = Java 19

    64 = Java 20

    简单来说,就是我的jdk是8,而编译的是11,我装了JDK11之后,把SDK换成11就行了,这样就解决 Invalid Status code=403 text=Forbidden 的问题了。

    idea设置jdk

    未经允许不得转载: 技术文章 » Java编程 » selenium报错java.io.IOException: Invalid Status code=403 text=Forbidden