在Selenium中设置代理版本使用int时,无法将java.lang.Long强制转换为类java.lang.Integer吗?

问题描述

我尝试为Selenium中的chromedriver设置一个袜子代理。代码很基本:

System.setProperty("webdriver.chrome.driver","/opt/local/bin/chromedriver"); 
ChromeOptions options = new ChromeOptions();
Proxy proxy = new Proxy();
proxy.setSocksProxy("127.0.0.1:9050");
proxy.setSocksversion(5);
options.setCapability("proxy",proxy);
WebDriver driver = new ChromeDriver(options);

执行此操作会崩溃

Driver info: driver.version: ChromeDriver
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:573)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:181)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:168)
    at org.openqa.selenium.chrome.ChromeDriver.<init>(ChromeDriver.java:157)

在myClass.MyClass.main(MyClass.java:32)

原因:java.lang.classCastException:类java.lang.Long无法强制转换为类java.lang.Integer(java.lang.Long和java.lang.Integer在以下模块的java.base中)加载程序'bootstrap')

    at org.openqa.selenium.Proxy.<init>(Proxy.java:94)
    at org.openqa.selenium.remote.ProtocolHandshake$Result.lambda$static$0(ProtocolHandshake.java:151)
    at org.openqa.selenium.remote.ProtocolHandshake$Result.<init>(ProtocolHandshake.java:166)
    at org.openqa.selenium.remote.W3CHandshakeResponse.lambda$successHandler$1(W3CHandshakeResponse.java:107)
    at org.openqa.selenium.remote.HandshakeResponse.lambda$getResponseFunction$0(HandshakeResponse.java:30)
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.java:126)
    at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
    at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
    at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:127)
    at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:502)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:488)
    at java.base/java.util.stream.AbstractPipeline.wrapAndcopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:543)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:128)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.java:74)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:136)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
    ... 6 more

第32行是WebDriver driver = new ChromeDriver(options);

我很困惑。我尝试从5中显式创建一个整数,但是结果是相同的。

当我阅读stacktrace时,感觉就像是Selenium本身将我的int转换为一路很长的整数!!!? setSocksversion为int,为什么突然这么长?

  1. 如何在硒中设置socks5-proxy?我的做法正确吗?

  2. 为什么 5 突然转换为 long ,该怎么办?

解决方法

看起来像一个已知的错误

尝试

ChromeOptions options = new ChromeOptions();
options.addArguments("--proxy-server=socks5://" + host + ":" + port);
WebDriver driver = new ChromeDriver(options);

取自https://github.com/SeleniumHQ/selenium/issues/5299