Buen día
Había escrito un post bastante extenso, pero al publciar la pregunta me dijo que era una operación no admitida y se perdió.
Resumen:
Necesito trabajar con sitio con shadow-root (no vi iframes).
Webpro en su opción «23» debería poder hacer esto (Access Shadow DOM), pero la misma no figura (si filtro por SHADOW, aparece webpro pero vacío).
Como se accede a esa funcionalidad?
Encontré ejemplo de código python en el manual del github de webpro, pero no es actual y no sirve para chrhome 96 o posterior.
Tengo que extraer texto y también hacer clicks.
—
EDIT: es shadow-root (open)
WALL-E
Hola, el comando de Access Shadow DOM fue deprecado porque no funcionaba de forma consistente. Revisa el manual de la carpeta example del módulo en la última versión, se agregó documentación para manejar datos dentro de shadow DOM. Antes debes revisar en el HTML si es shadow-root(open) o shadow-root(closed). Si es el segundo, no podrás acceder de ninguna manera ya que se bloquea el contenido. Si es open, podrás automatizarlo, si no debes interactuar con iframes, lo puedes hacer con javascript
rcocchiararo
vi el manual, pero el código que tiene es aparentemente de antes de selenium 4.1 y de antes de chrome 96, o eso me pareció.
Salvo que haya uno mas nuevo y no lo este yo encontrando?
WALL-E
Fue actualizado para que funcione en la última versión de Rocketbot, igualmente el código python es para poder ingresar a los iframes, debes revisar abajo que explica como hacer click, setear texto y obtenerlo con javascript
rcocchiararo
No se xq mi repsuesta de mas arriba quedó en mi post original, se ve que toqué algo mal. Leyendo tu mensaje, dudo si tengo que descartar la parte python al no haber iframe e ir directo a lo siguiente que es JS, o igual necesito hacer funcionar lo de arriba?.
WALL-E
Claro, no debes darle importancia a eso. El código python es para acceder a un iframe, debes revisar debajo de eso donde explica el manejo con javascript
rcocchiararo
Ya vi que el manual es el últmo.
En mi caso el elemento inmediato previo al Shadow-root es:
<div class=»mds-accounts-table-container»>
Dentro tiene:
<mds-data-table-for-accounts id=»accountsTableAG1Table0″ …blablba….
El código a usar:
Entre el manual y google lo probé así con «By.CSS_SELECTOR» o «By.ID» (como dice el manual).
En el caso de usar ID tenía que usar el ID dentro de la tabla.
Con CSS_Selector puedo usar lo que esta antes del ID. (no enconre como hacer «By.Class, o sea, usando la clase del DIV).
En todos los casos, la línea «shadow_root = WebElement(driver, shadow_root_id, w3c=True)» arroja «‘ShadowRoot’ object is not subscriptable.
Vale aclarar que se programar, pero no uso python con frecuencia.
Google y chatGPT mediante, probe diferentes cosas, pero n ose si estoy fallando yo o me faltan las instrucciones correctas para seleccionar «cosas» dentro del shadow root (ahí siempre me daban errores).
DUDA: para trabajar en este tipo de sitios, tengo que hacerlo todo por código, o se puede ejecutar algo que al terminar me deja posicionado dentro del shadow root de modo que pueda hacer click y extraer texto con funciones normales?
rcocchiararo
Bueno, ya con Run JS pude extraer texto, ineractuar, etc.
Ahora tengo que ver si/como podría usar variables en la generación del código JS que quiero correr para no tener que poner 14 x 2 líneas (tengo una tabla de 14 filas y tengo que extraer el texto de 2 columnas de cada fila 😛 )
rcocchiararo
Y ya repasando los videos vi que era super facil usar variables. No logro imigar la instrucción para contar elementos de las 2 tablas que debo recorrer (x estar en un shadowroot imagino que es muy diferente), pero por ahora me manejaré con tamaños fijos que levantaré de un archivo, y ya pude con esta tarea XD