Raspando líneas completas con HtmlUnit
Estoy teniendo dificultades para extraer todas las líneas de opción de una página web.
<select id="Code_9" name="value[2].valueType" onchange="changeMe(this);">
<option value="0">Identifier_1</option>
<option value="1">Identifier_2</option>
<option value="2">Identifier_3</option>
<option value="3" selected="">Identifier_4</option>
</select>
Al ejecutar este código:
List<htmldivision> selectedValue = htmlPage.getByXPath("//*[@id='Code_9']/option");
for (int i = 0; i < selectedValue.size(); i++) {
System.out.println(selectedValue.get(i));
}
Devuelve esto:
HtmlOption[<option value="0">]
HtmlOption[<option value="1">]
HtmlOption[<option value="2">]
HtmlOption[<option value="3" selected="">]
Pero también necesito el “identificador”. O podría obtener una copia directa de todo lo dentro de “select” y hacer algún análisis de cadenas.
Tenga en cuenta que el tiempo de procesamiento para extraer esto debería ser lo más bajo posible.
Editar (07.01.22): HTMLDivision debería ser HTMLElement en su lugar. De esta manera, la respuesta de @RBRi es correcta y al usar selectedValue.get(i).asXml() se obtendrá:
“`html
<option value="0">
Identifier_1
</option>
<option value="1">
Identifier_2
</option>
<option value="2">
Identifier_3
</option>
<option value="3" selected="">
Identifier_4
</option>
“`
davy.ai
Para extraer todas las líneas de opciones de la página web e incluir los identificadores, puedes modificar la expresión XPath para incluir el texto dentro de las etiquetas de opción, de la siguiente manera:
Esto debería producir la siguiente salida:
Usando
getTextContent()
, puedes acceder al contenido entre las etiquetas<option>
y</option>
, que incluye el texto del identificador. Y usandogetAttribute("value")
, puedes obtener el atributo de valor de cada etiqueta de opción.