web-dev-qa-db-ja.com

Chrome Unixのヘッドレスは空のページソースを返します

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)
8
Sivaram Kumar

私も同じ問題を抱えていました。特に、有効な証明書がないプロキシを追加する場合。これが私のために働いたものです:(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)    
2

_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の構成です。

参照: _Getting Started with Headless Chrome_


更新

あなたが見ているように:

_WebDriverException: chrome not reachable
_

手順に従ってください :

  • _Chrome Browser_から_Revo Uninstaller_をアンインストールします
  • CCleanerツールを実行して、すべてのOSの雑用を一掃します。
  • _System Restart_を取る
  • _Chrome Browser_の現在のバージョンをインストールします。
  • Testを実行します
2
DebanjanB

それはSSL証明書の問題です、私も同じ問題を抱えていました。ヘッドレスの場合chrome次のオプションは効果的ではありません、他の非SSLリンクに到達してみてください。chromeオプション->-ignore-ssl-errors

0
Vin