Je voudrais utiliser le chrome sans tête pour les tests automatisés utilisant le sélénium. ( https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md )
J'ai déjà la version sans tête sur 9222. Donc si j'ouvre http://10.252.100.33:9222/json/I obtenez
[ {
"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"
} ]
Comme prochaine étape, j'aimerais connecter le sélénium au chrome sans tête. Mais quand j'essaye
final DesiredCapabilities caps = DesiredCapabilities.chrome();
final WebDriver driver = new RemoteWebDriver(new URL("http://localhost:9222/json"), caps);
driver.get("http://www.google.com");
Je reçois la déconnexion suivante
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
Les questions sont:
Je pense que le fichier Lisezmoi est un peu trompeur. Vous n'avez pas besoin de démarrer Chromium lui-même et vous pouvez utiliser le RemoteWebDriver
. Assurez-vous qu'un chromedriver est installé ( https://sites.google.com/a/chromium.org/chromedriver/home ).
./chromedriver
ou ./chromedriver --port=9515
)--headless
comme argument supplémentaireLe code devrait ressembler à ceci:
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);
A travaillé pour moi sur Ubuntu Linux.
Alternativement, si vous l'exécutez localement, vous pouvez simplement le faire comme ceci. En scala.
val chromeOptions = new ChromeOptions
chromeOptions.addArguments("--headless")
new ChromeDriver(chromeOptions)
* Utilisez le code suivant:
ChromeOptions options = new ChromeOptions();
options.setHeadless(true); //Set Chrome option
driver = new ChromeDriver(options);
et vous obtiendrez Chrome "sans tête"!
* Code complet
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
}
si vous utilisez Selenium 3+ chrome pilote, vous pouvez simplement utiliser chrome options et lancer le pilote. Vérifiez les détails dans un projet
Exemple de projet sur Chrome Fonctionnement sans tête avec différentes options
options.setHeadless(true)