google-chrome - chromedriver - error de red desconocido google chrome
WebDriverException: error desconocido: el archivo DevToolsActivePort no existe al intentar iniciar el navegador Chrome (17)
Estoy intentando lanzar Chrome con una URL, el navegador se inicia y no hace nada después de eso.
Estoy viendo el siguiente error después de 1 minuto:
Unable to open browser with url: ''https://www.google.com'' (Root cause: org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn''t exist
(Driver info: chromedriver=2.39.562718 (9a2698cba08cf5a471a29d30c8b3e12becabb0e9),platform=Windows NT 10.0.15063 x86_64) (WARNING: The server did not provide any stacktrace information)
Mi configuración:
Chrome: 66 ChromeBrowser: 2.39.56
PS todo funciona bien en Firefox
Comencé a ver este problema el lunes 2018-06-04.
Nuestras pruebas se ejecutan cada día laborable.
Parece que lo único que cambió fue la versión de google-chrome (que se había actualizado a la actual) JVM y Selenium eran versiones recientes en el cuadro de Linux (Java 1.8.0_151, selenium 3.12.0, google-chrome 67.0.3396.62, y xvfb-run).
Específicamente, al agregar los argumentos "
--no-sandbox
" y "
--disable-dev-shm-use
" se detuvo el error.
Investigaré estos problemas para encontrar más información sobre el efecto, y otras preguntas como en qué activó google-chrome para actualizar.
ChromeOptions options = new ChromeOptions();
...
options.addArguments("--no-sandbox");
options.addArguments("--disable-dev-shm-usage");
Como este es el mensaje más activo para este tipo de error, quise mencionar mi solución (después de pasar horas para solucionar este problema).
En Ubuntu 18.04, usando Chrome 70 y Chromedriver 2.44, y Python3 seguí recibiendo el mismo error DevToolsActivePort, incluso cuando deshabilité todas las opciones enumeradas anteriormente. El archivo de registro de chromedriver, así como ps, mostraron que el chromedriver que configuré en chrome_options.binary_location se estaba ejecutando, pero siempre daba un error DevToolsActivePort. Cuando quité chrome_options.binary_location = ''....'' y lo agregué a la creación de webdriver, funcionó bien. webdriver.Chrome (''/ path to ... / chromedriver'', chrome_options = chrome_options)
Gracias a todos por sus comentarios que me hacen entender y resolver el problema.
En mi caso, estaba tratando de crear un jar ejecutable en el sistema operativo Windows con el navegador Chrome y quiero ejecutar el mismo en modo sin cabeza en el cuadro de Unix con CentOs en él. Y estaba apuntando mi binario a un controlador que he descargado y empaquetado con mi suite. Para mí, este problema sigue ocurriendo independientemente de agregar lo siguiente:
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--no-sandbox");
System.setProperty("webdriver.chrome.args", "--disable-logging");
System.setProperty("webdriver.chrome.silentOutput", "true");
options.setBinary("/pointing/downloaded/driver/path/in/automationsuite");
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("window-size=1024,768"); // Bypass OS security model
options.addArguments("--log-level=3"); // set log level
options.addArguments("--silent");//
options.setCapability("chrome.verbose", false); //disable logging
driver = new ChromeDriver(options);
¡La solución que he probado y trabajado para mí es descargar el chrome y sus herramientas en el cuadro VM / Unix del host, instalar y señalar el binario a este en la suite de automatización y el bingo! Funciona :)
Descargar comando:
wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
Instalar comando:
sudo yum install -y ./google-chrome-stable_current_*.rpm
Paquete de actualización con la ruta binaria de google-chrome a continuación:
options.setBinary("/opt/google/chrome/google-chrome");
¡Y funciona!
En mi caso, estoy en un entorno Kubernetes en el que no puedo usar el TMPDIR predeterminado porque llenará el directorio temporal con basura.
Así que estaba usando esto para usar un tmpdir diferente:
Selenium Version 3.12.0
ChromeDriver Version v2.40
Chrome 68 level
Pero ahora que he actualizado todo a la última, esto ya no parece funcionar. Tendré que encontrar una nueva forma de hacer esto.
En mi caso, sucedió cuando intenté usar mi perfil de usuario predeterminado:
...
options.addArguments("user-data-dir=D://MyHomeDirectory//Google//Chrome//User Data");
...
Esto provocó que Chrome reutilizara procesos que ya se estaban ejecutando en segundo plano, de tal manera que el proceso iniciado por chromedriver.exe simplemente se terminó.
Resolución: elimine todos los procesos chrome.exe que se ejecutan en segundo plano.
Estábamos teniendo los mismos problemas en nuestros esclavos jenkins (máquina linux) y probamos todas las opciones anteriores.
Lo único que ayudó fue establecer el argumento.
chrome_options.add_argument(''--headless'')
Pero cuando investigamos más, notamos que la pantalla XVFB no inició la propiedad y eso está causando este error. Después de arreglar la pantalla XVFB, se resolvió el problema.
Este mensaje de error ...
org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn''t exist
... implica que ChromeDriver no pudo iniciar / generar un nuevo WebBrowser, es decir, una sesión de Chrome Browser .
Su código de prueba y la información de las versiones de todos los binarios nos habrían dado alguna pista sobre lo que está mal.
Sin embargo, según
Add --disable-dev-shm-use to default launch flags
parece agregar el argumento
--disable-dev-shm-usage
resolverá temporalmente el problema.
Si desea iniciar / expandir una nueva sesión de Chrome Browser , puede usar la siguiente solución:
System.setProperty("webdriver.chrome.driver", "C://path//to//chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");
deshabilitar-dev-shm-uso
Según
base_switches.cc
disable-dev-shm-usage
parece ser válido solo en el
sistema operativo Linux
:
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// The /dev/shm partition is too small in certain VM environments, causing
// Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
// work-around this issue (a temporary directory will always be used to create
// anonymous shared memory files).
const char kDisableDevShmUsage[] = "disable-dev-shm-usage";
#endif
En la discusión Agregue una opción para usar / tmp en lugar de / dev / shm David menciona:
Creo que dependería de cómo se montan / dev / shm y / tmp. Si ambos están montados como tmpfs, asumo que no habrá ninguna diferencia. Si por alguna razón, / tmp no se asigna como tmpfs (y creo que se asigna como tmpfs de forma predeterminada por systemd), la gestión de la memoria compartida de Chrome siempre asigna los archivos a la memoria al crear archivos compartidos anónimos, por lo que incluso en ese caso no debería ser mucha diferencia Supongo que podría forzar las pruebas de telemetría con el indicador habilitado y ver cómo va.
En cuanto a por qué no usarlo de forma predeterminada, fue un rechazo por parte del equipo de memoria compartida, supongo que tiene sentido que debería usar / dev / shm para la memoria compartida de forma predeterminada.
En última instancia, todo esto debería moverse para utilizar memfd_create, pero no creo que eso vaya a suceder en el corto plazo, ya que requerirá una refactorización significativa de la administración de memoria de Chrome.
Hace poco me enfrenté al mismo problema y, después de algunas pruebas y errores, también me funcionó.
DEBE ESTAR EN LA PARTE SUPERIOR:
options.addArguments("--no-sandbox"); //has to be the very first option
BaseSeleniumTests.java
public abstract class BaseSeleniumTests {
private static final String CHROMEDRIVER_EXE = "chromedriver.exe";
private static final String IEDRIVER_EXE = "IEDriverServer.exe";
private static final String FFDRIVER_EXE = "geckodriver.exe";
protected WebDriver driver;
@Before
public void setUp() {
loadChromeDriver();
}
@After
public void tearDown() {
if (driver != null) {
driver.close();
driver.quit();
}
}
private void loadChromeDriver() {
ClassLoader classLoader = getClass().getClassLoader();
String filePath = classLoader.getResource(CHROMEDRIVER_EXE).getFile();
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeDriverService service = new ChromeDriverService.Builder()
.usingDriverExecutable(new File(filePath))
.build();
ChromeOptions options = new ChromeOptions();
options.addArguments("--no-sandbox"); // Bypass OS security model, MUST BE THE VERY FIRST OPTION
options.addArguments("--headless");
options.setExperimentalOption("useAutomationExtension", false);
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.merge(capabilities);
this.driver = new ChromeDriver(service, options);
}
}
GoogleSearchPageTraditionalSeleniumTests.java
@RunWith(SpringRunner.class)
@SpringBootTest
public class GoogleSearchPageTraditionalSeleniumTests extends BaseSeleniumTests {
@Test
public void getSearchPage() {
this.driver.get("https://www.google.com");
WebElement element = this.driver.findElement(By.name("q"));
assertNotNull(element);
}
}
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Me encontré con el mismo problema al ejecutar Chrome a través de Behat / Mink y Selenium en un contenedor Docker.
Después de algunos problemas, llegué al siguiente
behat.yml
que suministra los interruptores mencionados anteriormente.
Tenga en cuenta que todos ellos fueron necesarios para que funcionara correctamente.
default:
extensions:
Behat/MinkExtension:
base_url: https://my.app/
default_session: selenium2
selenium2:
browser: chrome
capabilities:
extra_capabilities:
chromeOptions:
args:
- "headless"
- "no-sandbox"
- "disable-dev-shm-usage"
Ninguna solución funcionó para mi. Pero aquí hay una solución:
maxcounter=5
for counter in range(maxcounter):
try:
driver = webdriver.Chrome(chrome_options=options,
service_log_path=logfile,
service_args=["--verbose", "--log-path=%s" % logfile])
break
except WebDriverException as e:
print("RETRYING INITIALIZATION OF WEBDRIVER! Error: %s" % str(e))
time.sleep(10)
if counter==maxcounter-1:
raise WebDriverException("Maximum number of selenium-firefox-webdriver-retries exceeded.")
Parece que hay muchas causas posibles para este error. En nuestro caso, el error ocurrió porque teníamos las siguientes dos líneas en el código:
System.setProperty("webdriver.chrome.driver", chromeDriverPath);
chromeOptions.setBinary(chromeDriverPath);
Se resuelve eliminando la segunda línea.
También me enfrenté a este problema al integrarme con el servidor jenkins, se usó el usuario root para el trabajo de jenkin, el problema se solucionó cuando cambié el usuario a otro usuario . No estoy seguro de por qué se produce este error para el usuario root.
Google Chrome versión 71.0
ChromeDriver versión 2.45
CentOS7 versión 1.153
Tuve el mismo problema en python. Lo anterior ayudó. Aquí está lo que usé en python -
chrome_options = Options()
chrome_options.add_argument(''--headless'')
chrome_options.add_argument(''--no-sandbox'')
chrome_options.add_argument(''--disable-dev-shm-usage'')
driver = webdriver.Chrome(''/path/to/your_chrome_driver_dir/chromedriver'',chrome_options=chrome_options)
Tuve el mismo problema, pero en mi caso, Chrome se instaló previamente en la carpeta temporal del usuario, después de eso se reinstaló en los archivos del programa. Así que cualquiera de la solución aquí provista no me ayudó. Pero si proporciona ruta a chrome.exe todo funciona:
chromeOptions.setBinary("C://Program Files (x86)//Google//Chrome//Application//chrome.exe");
Espero que esto ayude a alguien =)
yum -y install gtk3-devel gtk3-devel-docs
este problema instalando
yum -y install gtk3-devel gtk3-devel-docs
", funciona bien
Mi trabajo env es:
Selenium Version 3.12.0 ChromeDriver Version v2.40 Chrome 68 level
Antes de:
Después:
Actualizar:
Puedo superar el problema y ahora puedo acceder a Chrome con la URL deseada.
Resultados de probar las soluciones proporcionadas:
Intenté todos los ajustes como se indicó anteriormente pero no pude resolver el problema
Explicación sobre el tema:
Según mi observación, el archivo DevToolsActivePort no existe se debe a que Chrome no puede encontrar su referencia en la carpeta scoped_dirXXXXX.
Pasos tomados para resolver el problema.
- He eliminado todos los procesos de Chrome y los procesos de Chrome Driver.
-
Se agregó el siguiente código para invocar el cromo.
System.setProperty("webdriver.chrome.driver","pathto//chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("useAutomationExtension", false); WebDriver driver = new ChromeDriver(options); driver.get(url);
Usando los pasos anteriores pude resolver el problema.
Gracias por tus respuestas.
capacidades de actualización en conf.js como
exports.config = {
seleniumAddress: ''http://localhost:4444/wd/hub'',
specs: [''todo-spec.js''],
capabilities: {
browserName: ''chrome'',
chromeOptions: {
args: [''--disable-gpu'', ''--no-sandbox'', ''--disable-extensions'', ''--disable-dev-shm-usage'']
}
},
};