0. Introduction
I want to access an https page that asks for user and password. But we don't know what are the fields. So let's use an inspector (like chrome developer utilities) to find the html elements to fill.1. Inspecting a page with Chrome
I want to enter this URL: https://contrataciondelestado.es/wps/portal/organismosPublicos. So I use chrome and identify field properties for user and password for locating them. But don't the submit button!!!
Following the steps 1,2,3, we get the code for the user input field and repeating these steps we get the code for password, and submit button too. Here is the code
1 2 3 4 5 | <input id="input_userID" dir="ltr" title="ID de usuario" type="text" class="ancho150px marginTop0punto5 inputLoginTipo" name="wps.portlets.userid" value=""> <input id="input_password" dir="ltr" title="Password" type="password" class="ancho150px marginTop0punto5 inputLoginTipo" name="password"> <input title="Log in" class="ancho150px botonLogin" onclick="javascript:logarse();" type="submit" name="ns_Z7_BS88AB1A087BD0A6E365Q12082__login" value="Entrar"> |
Now it is time to identify components.
2. Inspecting a page with HtmlUnit
Let's create a class for this purpose. It is practically the same code that in the last post.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package ximodante; import java.io.IOException; import java.net.MalformedURLException; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class HtmlUnit02 { public static void main(String[] args) { //01. Creatwe a WebClient object WebClient webClient=new WebClient(); //02. Avoid certificate problems in https connection // @see https://stackoverflow.com/a/28543031/7704658 boolean useInsecureSSL=true; webClient.getOptions().setUseInsecureSSL(useInsecureSSL); //03 Open a HTML page at an URL String anURL="https://contrataciondelestado.es/wps/portal/organismosPublicos"; HtmlPage page=null; try { page = webClient.getPage(anURL); } catch (FailingHttpStatusCodeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //04. Print elements for (HtmlElement field: page.getDocumentElement().getHtmlElementDescendants()) { // Inspect only the needed elements (user password longin). // Comment the if statement if you want to see the whole page structure if (field.toString().contains("input_userID") || field.toString().contains("input_password")|| field.toString().contains("Log in")) System.out.println(" "+ field.toString()); } } } |
Note line 38 for retrieving all elements of the page and if you want to see the elements related o user and password, the "if" statement is used. Read the comments on lines 40-41
The output is (after cleaning unuseful stuff)
HtmlLabel[<label id="label_userlogin" for="input_userID" class="paddingLeft0punto5 displayblock textoLogin">] HtmlTextInput[<input id="input_userID" dir="ltr" title="User ID" type="text" class="ancho150px marginTop0punto5 inputLoginTipo" name="wps.portlets.userid" value="">] HtmlLabel[<label id="label_userpassword" for="input_password" class="paddingLeft0punto5 displayblock textoLogin">] HtmlPasswordInput[<input id="input_password" dir="ltr" title="Password" type="password" class="ancho150px marginTop0punto5 inputLoginTipo" name="password">] HtmlSubmitInput[<input title="Log in" class="ancho150px botonLogin" onclick="javascript:logarse();" type="submit" name="ns_Z7_BS88AB1A087BD0A6E365Q12082__login" value="Enter">]
We can see that a "HtmlInput" object is used for user and a "HtmlPasswordInput" object is used for the password and a "HtmlSubmitInput" for the submit button
3. Getting the user and password fields
Let's add extra code for filling the user and password fields and clicking the buttonHere is the full code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | package ximodante; import java.io.IOException; import java.net.MalformedURLException; import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlElement; import com.gargoylesoftware.htmlunit.html.HtmlPage; import com.gargoylesoftware.htmlunit.html.HtmlPasswordInput; import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; import com.gargoylesoftware.htmlunit.html.HtmlTextInput; public class HtmlUnit02 { public static void main(String[] args) { //01. Creatwe a WebClient object WebClient webClient=new WebClient(); //02. Avoid certificate problems in https connection // @see https://stackoverflow.com/a/28543031/7704658 boolean useInsecureSSL=true; webClient.getOptions().setUseInsecureSSL(useInsecureSSL); //03 Open a HTML page at an URL String anURL="https://contrataciondelestado.es/wps/portal/organismosPublicos"; HtmlPage page=null; try { page = webClient.getPage(anURL); } catch (FailingHttpStatusCodeException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } //04. Print elements for (HtmlElement field: page.getDocumentElement().getHtmlElementDescendants()) { // Inspect only the needed elements (user password longin). // Comment the if statement if you want to see the whole page structure if (field.toString().contains("input_userID") || field.toString().contains("input_password")|| field.toString().contains("Log in")) { //System.out.println(" "+ field.toString()); if (field.getAttribute("id").equals("input_userID")) ((HtmlTextInput)field).setValueAttribute("myUser"); else if (field.getAttribute("id").equals("input_password")) ((HtmlPasswordInput)field).setValueAttribute("myPassword"); else if (field.getClass().getSimpleName().equals("HtmlSubmitInput") && field.getAttribute("title").equals("Log in")) { HtmlPage page2=null; try { page2 = ((HtmlSubmitInput)field).click(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(page2.asText()); } } } } } |
The user and password fields have been identified by its "id" but the submit button has been selected by its "value" attribute.
The user field has been set to "myUser" and the pasword to "myPassword".
Obviously, we have been refused to been logged in as shown in line 21 of the output
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | Plataforma de Contratación del Sector Público
Bienvenidos | Ongi Etorri | Benvinguts | Benvidos | Welcome | Bienvenue
|
Inicio Search Contractor Profile Empresas Organismos Públicos Verificar CSV Información Contacto Search Datos abiertos
No se ha podido iniciar sesión para ese ID de usuario y contraseña
Organismos Públicos
User ID
myUser
Password
¿Olvidó su contraseña?
Enter
Enter with certificate
Los órganos de contratación dependientes del Sector Público Estatal están obligados por Ley a publicar su perfil del contratante en esta plataforma
Los órganos de contratación de los organismos vinculados a las CCAA y EELL pueden optar por publicar su Perfil del Contratante en la Plataforma de Contratatación del Sector Público o por mantener su propio perfil del contratante. En este último caso, deberán publicar en la Plataforma sus convocatorias de licitaciones así como el resultado de éstas mediante mecanismos de agregación de información. Más información en Interacción sistémica(B2B)
Los organismos públicos que publican su perfil del contratante en la Plataforma de Contratación del Sector Público disponen de los siguientes servicios de forma totalmente gratuita:
Publicación de licitaciones, anuncios y documentos contractuales /pliegos, Anexos
Publicación de cualesquiera informaciones o documentos que configuran el Perfil del Contratante (composición mesas de contrtación, modelos de pliegos y documentos, previsiones de contratación, etc.)
Publicación de anuncios sobre licitaciones en el Boletín Oficial del Estado y en el Diario Oficial de la Unión Europea
Respuesta a preguntas de las empresas sobre procedimientos de adjudicación publicitados en el perfil del contratante
Envío de notificaciones electrónicas a los licitadores en el marco de un proceso de adjudicación
Publicación de contratos adjudicados en el Portal de Transparencia de la Administración General del Estado
Descarga de certificados de inscripción del Registro Oficial de Licitadores y Empresas Clasificadas del Estado (ROLECE)
Consulta sobre los licitadores a servicios de información de la Administración
Publicación de anuncios y documentos en el perfil del contratante, BOE y DOUE mediante servicios web. Más información en Interacción sistémica(B2B)
Recepción, custodia, apertura y evaluación de ofertas electrónicas
Puede encontrar las instrucciones para dar de alta su perfil del contratante en la Plataforma en Acceso a la Plataforma
AvisosActualidad
Noticias
04/03/2019
Consulta preliminar al mercado para conocer el grado de desarrollo de la innovación tecnológica en el ámbito de la búsqueda y el salvamento marítimo, la detección de contaminación en el mar, la gestión del tráfico marítimo y las comunicaciones entre los intervinientes en la atención a una emergencia por parte de la Sociedad de Salvamento y Seguridad Marítima
28/02/2019
Consulta preliminar de mercado relativa a soluciones informáticas capaces de automatizar la gestión interna y seguimiento de todos los expedientes de contratación promovidos por la Sociedad Estatal Loterías y Apuestas del Estado (Tramitador de Contratos)
Ver más noticias
Home
Legal advisory
Protección de datos
Navigation guide
RSS
Sitemap
Accessibility
|
No hay comentarios:
Publicar un comentario