Chrome Headlessを使用してUnixマシン(Cent OS)でSeleniumテストスクリプトを実行していますが、同じスクリプトがローカルのWindowsマシンで完全に機能します。
しかし、Unixマシンでは、空のhtmlタグのような空のページソースを返します。
最新のChromeDriver2.33とgoogle chrome version 62.0。を使用していますが、エラーが発生した場所はわかりません。
System.setProperty("webdriver.chrome.driver", "/../chromedriver.exe");
--chromedriver.exe for windows local machine
-- chromedriver for unix machine
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--no-sandbox");
options.setAcceptInsecureCerts(true);
options.addArguments("--ignore-ssl-errors=true");
options.addArguments("--ssl-protocol=any");
options.setHeadless(true);
driver = new ChromeDriver(options);
System.out.println("Timeout invoke ");
driver.get("https://www.google.co.in/");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
System.out.println("After invoke ");
System.out.println("PAGE SOURCE : \n" + driver.getPageSource());
System.out.println("RUN COMPLETE..");
上記をUnixマシンで実行すると、
ページソース:
<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body></body></html>
事前にこの感謝を修正するのを手伝ってください
完全なStackTrace:
Starting ChromeDriver 2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f) on port 33523
Only local connections are allowed. org.openqa.Selenium.WebDriverException: chrome not reachable (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT
6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.41 seconds Build info: version: '3.7.1', revision: '8a0099a', time: '2017-11-06T21:01:39.354Z' System info: Host: 'Windows', ip: '', os.name: 'Windows 7', os.Arch: 'AMD64', os.version: '6.1', Java.version: '1.8.0_144'
Driver info: driver.version: ChromeDriver at Sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at Sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.Java:62) at Sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.Java:45) at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423) at org.openqa.Selenium.remote.ErrorHandler.createThrowable(ErrorHandler.Java:214) at org.openqa.Selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.Java:166) at org.openqa.Selenium.remote.JsonWireProtocolResponse.lambda$new$0(JsonWireProtocolResponse.Java:53) at org.openqa.Selenium.remote.JsonWireProtocolResponse.lambda$getResponseFunction$2(JsonWireProtocolResponse.Java:91) at org.openqa.Selenium.remote.ProtocolHandshake.lambda$createSession$0(ProtocolHandshake.Java:123) at Java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.Java:193) at Java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.Java:958) at Java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.Java:126) at Java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.Java:498) at Java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.Java:485) at Java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.Java:471) at Java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.Java:152) at Java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.Java:234) at Java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.Java:464) at org.openqa.Selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.Java:126) at org.openqa.Selenium.remote.ProtocolHandshake.createSession(ProtocolHandshake.Java:73) at org.openqa.Selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.Java:142) at org.openqa.Selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.Java:83) at org.openqa.Selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.Java:600) at org.openqa.Selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.Java:219) at org.openqa.Selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.Java:142) 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)
私も同じ問題を抱えていました。特に、有効な証明書がないプロキシを追加する場合。これが私のために働いたものです:(Pythonコード)
polipo_proxy = "127.0.0.1:8124"
proxy = Proxy({
'proxyType': ProxyType.MANUAL,
'httpProxy': polipo_proxy,
'ftpProxy' : polipo_proxy,
'sslProxy' : polipo_proxy,
'noProxy' : ''
})
capabilities = dict(DesiredCapabilities.CHROME)
proxy.add_to_capabilities(capabilities)
capabilities['acceptSslCerts'] = True
capabilities['acceptInsecureCerts'] = True
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--ignore-certificate-errors')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--window-size=1280,1000')
chrome_options.add_argument('--allow-insecure-localhost')
chrome_options.add_argument('--allow-running-insecure-content')
chrome_options.add_argument('--no-sandbox')
driver = webdriver.Chrome(executable_path=os.path.abspath("/var/chromedriver/chromedriver"), chrome_options=chrome_options, desired_capabilities=capabilities)
_Chrome Browser
_ in _Headless Mode
_ in _Unix Systems
_を実行するには、引数_--disable-gpu
_および_--remote-debugging-port=9222
_:
_System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--no-sandbox");
options.setAcceptInsecureCerts(true);
options.addArguments("--ignore-ssl-errors=true");
options.addArguments("--ssl-protocol=any");
options.setHeadless(true);
options.addArguments("--remote-debugging-port=9222");
options.addArguments("window-size=1400,600");
WebDriver driver = new ChromeDriver(options);
System.out.println("Timeout invoke ");
driver.get("https://www.google.co.in/");
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
System.out.println("After invoke ");
System.out.println("PAGE SOURCE : \n" + driver.getPageSource());
System.out.println("RUN COMPLETE..");
_
注A:単一のオプションaddArguments("--headless")
とsetHeadless(true)
の両方を一緒に渡すことは避けてくださいWebDriverインスタンス。
注B:Linux/UnixベースのシステムではaddArguments("--disable-gpu");
を使用しないでください。これは、WindowsベースのOSの構成です。
あなたが見ているように:
_WebDriverException: chrome not reachable
_
手順に従ってください :
Chrome Browser
_から_Revo Uninstaller
_をアンインストールしますCCleaner
ツールを実行して、すべてのOSの雑用を一掃します。System Restart
_を取るChrome Browser
_の現在のバージョンをインストールします。Test
を実行しますそれはSSL証明書の問題です、私も同じ問題を抱えていました。ヘッドレスの場合chrome次のオプションは効果的ではありません、他の非SSLリンクに到達してみてください。chromeオプション->-ignore-ssl-errors