web-dev-qa-db-ja.com

Seleniumを使用してChromium Headlessに接続する方法

Seleniumを使用した自動テストにクロムヘッドレスを使用したいと思います。 ( https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md

私はすでに9222で実行されているヘッドレスバージョンを持っています。だから私が開いたら http://10.252.100.33:9222/json/I get

[ {
   "description": "",
   "devtoolsFrontendUrl": "/devtools/inspector.html?ws=127.0.0.1:9223/devtools/page/0261be06-1271-485b-bdff-48e443de7a91",
   "id": "0261be06-1271-485b-bdff-48e443de7a91",
   "title": "The Chromium Projects",
   "type": "page",
   "url": "https://www.chromium.org/",
   "webSocketDebuggerUrl": "ws://127.0.0.1:9223/devtools/page/0261be06-1271-485b-bdff-48e443de7a91"
} ]

次のステップとして、Seleniumをヘッドレスクロムに接続します。しかし、私がしようとすると

final DesiredCapabilities caps = DesiredCapabilities.chrome();
final WebDriver driver = new RemoteWebDriver(new URL("http://localhost:9222/json"), caps);
driver.get("http://www.google.com");

次のログアウトを取得します

Jän 24, 2017 7:14:45 PM org.openqa.Selenium.remote.ProtocolHandshake createSession
INFORMATION: Attempting bi-dialect session, assuming Postel's Law holds true on the remote end
Jän 24, 2017 7:14:45 PM org.openqa.Selenium.remote.ProtocolHandshake createSession
INFORMATION: Falling back to original OSS JSON Wire Protocol.
Jän 24, 2017 7:14:45 PM org.openqa.Selenium.remote.ProtocolHandshake createSession
INFORMATION: Falling back to straight W3C remote end connection

org.openqa.Selenium.SessionNotCreatedException: Unable to create new remote session. desired capabilities = Capabilities [{browserName=chrome, version=, platform=ANY}], required capabilities = Capabilities [{}]
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:49:13 -0700'
System info: Host: 'Geralds-MacBook-Pro.local', ip: '192.168.0.249', os.name: 'Mac OS X', os.Arch: 'x86_64', os.version: '10.12.2', Java.version: '1.8.0_111'
Driver info: driver.version: RemoteWebDriver

質問は次のとおりです。

12
geri-m

READMEは少し誤解を招くと思います。 Chromium自体を起動する必要はなく、RemoteWebDriverを使用できます。 chromedriverがインストールされていることを確認してください( https://sites.google.com/a/chromium.org/chromedriver/home )。

  • Chromedriverを起動します(例:./chromedriverまたは./chromedriver --port=9515
  • 次に、Chromeの代わりにChromiumを使用するようにchromedriverに指示しました
  • --headlessを追加の引数として追加します

コードは次のようになります。

final ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setBinary("/usr/bin/chromium-browser");
chromeOptions.addArguments("--headless");
desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
WebDriver driver = new RemoteWebDriver(url, desiredCapabilities);

Ubuntu Linuxで私のために働いた。

14
hkq

あるいは、ローカルで実行している場合は、このようにすることができます。スカラで。

val chromeOptions = new ChromeOptions
chromeOptions.addArguments("--headless")
new ChromeDriver(chromeOptions)
4
Stephen

*次のコードを使用します。

ChromeOptions options = new ChromeOptions();  
options.setHeadless(true); //Set Chrome option
driver = new ChromeDriver(options);  

「ヘッドレス」Chromeを入手できます!

*完全なコード

import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.chrome.ChromeDriver;
import org.openqa.Selenium.chrome.ChromeOptions;  //import ChromeOptions

public class web_crawl {

    private static WebDriver driver = null;

    public static void main(String[] args) {


       ChromeOptions options = new ChromeOptions();
       options.setHeadless(true);

       driver = new ChromeDriver(options);   
       driver.get("http://www.google.com");   //The website you want to connect to 


    }
1
kuo chang

selenium 3+ chrome driverを使用している場合は、chrome optionsを使用してドライバを開始します。プロジェクトの詳細を確認します。

Chromeさまざまなオプションでヘッドレス実行)のプロジェクト例

 options.setHeadless(true)
1
Shantonu