Manejo de la redirección con PhantomJS + Selenium

Actualmente ejecuto pruebas de navegador a través de PhantomJS + Selenium en Python.

desired_capabilities = dict(DesiredCapabilities.PHANTOMJS) desired_capabilities["phantomjs.page.settings.userAgent"] = ("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36") driver = webdriver.PhantomJS(executable_path="./phantomjs", desired_capabilities=desired_capabilities) driver.get('http://google.com') 

Esto funciona bien, a menos que la página que estoy tratando de get tenga un redireccionamiento.

Ejemplo:

 https://login.vrealizeair.vmware.com/ 

En este caso, el get no funciona correctamente. La fuente de la página está vacía: .

Este es un problema conocido con soluciones publicadas que implican agregar un fragmento de código para manejar las redirecciones de manera adecuada.

¿Cómo / dónde agrega este código si está ejecutando pruebas con Selenium (en mi primer fragmento de código)? ¿Es parte de desired_capabilties ?

Ejemplo:

 page.onNavigationRequested = function(url, type, willNavigate, main) { if (main && url!=myurl) { myurl = url; console.log("redirect caught") page.close() renderPage(url); } }; page.open(url, function(status) { if (status==="success") { console.log(myurl); console.log("success") page.render('yourscreenshot.png'); phantom.exit(0); } else { console.log("failed") phantom.exit(1); } }); 

Lo probé con PhantomJS 1.9.8 y 2.0.1-desarrollo.

Resulta que la página no se pudo rastrear debido a un error: SSL handshake failed .

La solución es usar la siguiente línea para inicializar el controlador:

 driver = webdriver.PhantomJS(executable_path="./phantomjs", service_args=['--ignore-ssl-errors=true']) 

He usado la siguiente configuración:

 DesiredCapabilities capabilities; capabilities = new DesiredCapabilities(); capabilities.setJavascriptEnabled(true); capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "drivers/phantomjs.exe"); capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_PAGE_SETTINGS_PREFIX,"Y"); capabilities.setCapability("phantomjs.page.settings.userAgent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0) Gecko/20121026 Firefox/16.0"); //intialize driver and set capabilties driver = new PhantomJSDriver(capabilities); 

Luego, ejecuté las siguientes dos líneas y funcionaron bien para mí.

 driver.get("https://login.vrealizeair.vmware.com/"); System.out.println(driver.getCurrentUrl()); System.out.println(driver.getPageSource()); 

Aquí está la salida:

 https://login.vrealizeair.vmware.com/sso/UI/Login    Login | vRealize™ Air™    

Probé el siguiente código en python y parece que funciona bien:

 from selenium import webdriver driver = webdriver.PhantomJS("./phantomjs") driver.get("https://login.vrealizeair.vmware.com/") print 'done' print driver.current_url print driver.page_source 

Salida (trabajando bien):

 https://login.vrealizeair.vmware.com/sso/UI/Login    Login | vRealize™ Air™  

Nota de Imp : Comienza a navegar desde la página base. El código html está vacío porque el sitio web probablemente está arrojando un error 403. Si la URL de inicio de sesión no funciona, intente navegar desde las páginas que aparecen antes de la página de inicio de sesión.

Esta solución realmente funcionó para mí, estaba obteniendo un error inferior en phantomjsdriver.log y al intentar iniciar sesión, phantomjs se desconectó.

 [DEBUG - 2017-08-19T20:37:59.288Z] Session [47739640-851e-11e7-9326-9bef0ad085f5] - page.onResourceError - {"errorCode":299,"errorString":"Error transferring https://int-test-cc.gcsip.nl:4443/rest/user/keepAlive?cacheBuster=1503175078533 - server replied: Unsupported Media Type","id":9,"status":415,"statusText":"Unsupported Media Type","url":"IPAdd:port/rest/user/keepAlive?cacheBuster=1503175078533"} 

después de agregar las siguientes capacidades a phantomjs funcionó –

 caps.setJavascriptEnabled(true) caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "phantomjs") caps.setCapability(PhantomJSDriverService.PHANTOMJS_PAGE_SETTINGS_PREFIX,"Y"); caps.setCapability("phantomjs.page.settings.userAgent","Mozilla/5.0 (X11; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0")//"Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/602.1 (KHTML, like Gecko) PhantomJS/2.5.0-development Version/9.0 Safari/602.1") caps.setCapability(PhantomJSDriverService.PHANTOMJS_PAGE_CUSTOMHEADERS_PREFIX + "Content-Type","application/json;charset=utf-8") caps.setCapability(PhantomJSDriverService.PHANTOMJS_PAGE_CUSTOMHEADERS_PREFIX + "Connection","Keep-Alive")