Lectura Componente IAccessible-24 C#

Buenos días,

Estoy utilizando la captura de componentes con la clase IAccessible-24 para poder interactuar con Chrome. Para la interacción con el componente no tengo problema, pero necesito poder leer una tabla HTML en Chrome y al intentar acceder a través de .dochild de ActiveX me salta un error de que no tengo descendientes en el componente.
Durante la captura del componente puedo visualizar que tiene dos hijos, de los que quiero leer el contenido:
image
image

¿Qué conversión debería hacer para acceder a la información dentro de la clase RPAWin32Accessibility?

Gracias.
Un saludo.

Hola @vgarcia, lo que debes hacer es lo que dices estar haciendo. Por tanto, sospecho que tienes algún error en ese fragmento de código, o que a lo mejor los hijos se generan dinamicamente y no está bien sincronizado tu código con las acciones de Chrome.

Por favor, danos ese código para que pueda evaluarlo.

Buenas,

La tabla que tengo que leer efectivamente se genera de forma dinámica al aplicar un filtro y es la siguiente:

image

La función que lee esa tabla es la siguiente:

public void ReadRates()
{
RPAParameters param = new RPAParameters();
var i = 0;
var tableRoute = @"\0\18\1\1";
var ratesTable = (RPAWin32Accessibility)cartes.component(DingusComponents.RatesTable);
while (ratesTable.Visible == 0)
Thread.Sleep(3000);

        if (ratesTable.componentexist(20) == 1)
        {
            ratesTable.focus();
            var numberDescendants = Convert.ToInt32(ratesTable.dochild(tableRoute, "descendants", param));

                      
        }

}

DingusComponents.RatesTable contiene el nombre del componente capturado en Cartes. En esta función numberDescendants siempre es 0, cuando en realidad sí que tengo descendientes.

Muchas gracias.
Un saludo.

Debajo del sleep deberías añadir el reset.
Thread.Sleep(3000);
cartes.reset(ratesTable.api());

Por otra parte, no veo la lógica de tu código. ¿Quieres saber el número de hijos de resTable o el de su descendiente “\0\18\1\1”?

resTable.descendants no es lo mismo que resTable.dochild("\0\18\1\1", “descendants”)

resTable.descendants es el número de descendientes de resTable
resTable.dochild("\0\18\1\1", “descendants”) es el número de hijos del descendiente de resTable “\0\18\1\1”

Sospecho que lo que quieres es este código:

do{
if (timeout < Now()) throw new Exception(“timeout”);
Thread.Sleep(3000);
cartes.reset(ratesTable.api());
}while ((ratesTable.componentexist(20) != 1) || (ratesTable.Visible == 0));

numberDescendants = ratesTable.descendants();

¿Te sirve?

Buenos días,

Necesitaba acceder al número de descendientes para poder acceder al valor de cada uno de ellos. En HTML tengo una tabla y necesito acceder al valor de los td, mi problema es que el método Value siempre está a null y no me consigo transformar el componente de tipo RPAWin32Accessibility a otro tipo que me permita leer el contenido del td.

Con lo que me has comentado sí consigo el número de descendientes, pero no el valor del td.

Gracias.
Un saludo.

Si quieres saber exactamente la clase del ActiveX, usa el método:

function ActiveXClass: string;

De todas formas no creo que sea este tu problema. Te has empeñado en el casting y tu problema está en otra parte. Tal y cómo lo cuentas parece que no sabes en qué componente tienes el dato que necesitas, ni en qué propiedad. Es decir, tengo la impresión de que no es el td quien te da esa información y es otro componente, o tal vez no es la propiedad value la que debes leer sino otra.

Te sugiero que uses el capturador para navegar por los descendientes y localices dónde está la información que necesitas.

1 Like