es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>
“`

Tags:  , ,

Answer

  1. Avatar for 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:

    List<htmlelement> options = htmlPage.getByXPath("//select[@id='Code_9']/option");
    for (HtmlElement option : options) {
        String value = option.getAttribute("value");
        String text = option.getTextContent();
        System.out.println(value + " " + text);
    }
    

    Esto debería producir la siguiente salida:

    0 Identifier_1
    1 Identifier_2
    2 Identifier_3
    3 Identifier_4
    

    Usando getTextContent(), puedes acceder al contenido entre las etiquetas <option> y </option>, que incluye el texto del identificador. Y usando getAttribute("value"), puedes obtener el atributo de valor de cada etiqueta de opción.

Comments are closed.