问题描述
我尝试为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,为什么突然这么长?
-
如何在硒中设置socks5-proxy?我的做法正确吗?
-
为什么 5 突然转换为 long ,该怎么办?
解决方法
看起来像一个已知的错误
尝试
ChromeOptions options = new ChromeOptions();
options.addArguments("--proxy-server=socks5://" + host + ":" + port);
WebDriver driver = new ChromeDriver(options);