IngresarRegistrarme

Rocketbot Forum

Rocketbot Forum Logo Rocketbot Forum Logo

Rocketbot Forum Navigation

  • Academy Rocketbot
  • Tutoriales
  • Documentación
Search
Realiza una Pregunta

Mobile menu

Close
  • Home
  • Popular
  • Categorías
  • Tags
  • Preguntas
    • Nuevas Preguntas
    • Más votadas
    • Más visitadas
    • Más respondidas
  • Academy Rocketbot
  • Tutoriales
  • Documentación
Home/ Preguntas/Q 14248
Siguiente
En Proceso

Rocketbot Forum Latest Preguntas

rcocchiararo
  • 0
  • 0
rcocchiararo
Asked: septiembre 25, 20232023-09-25T19:57:48+00:00 2023-09-25T19:57:48+00:00En: Addons

Acceder a shadow-root / shadow-dom

  • 0
  • 0

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)

8
  • 8 8 Respuestas
  • 4k Vistas
  • 0 Seguidores
  • 0
Compartir
  • Facebook

    8 Respuestas

    • Voted
    • Oldest
    • Recent
    1. WALL-E
      WALL-E
      2023-09-26T12:13:18+00:00Added an answer on septiembre 26, 2023 at 12:13 pm

      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

        • 0
      • Responder
      • Compartir
        Compartir
        • Compartir en Facebook
        • Compartir en Twitter
        • Compartir en LinkedIn
        • Compartir en WhatsApp
      • rcocchiararo
        rcocchiararo
        2023-09-26T12:20:54+00:00Replied to answer on septiembre 26, 2023 at 12:20 pm

        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?

          • 0
        • Responder
        • Compartir
          Compartir
          • Compartir en Facebook
          • Compartir en Twitter
          • Compartir en LinkedIn
          • Compartir en WhatsApp
        • WALL-E
          WALL-E
          2023-09-26T12:31:23+00:00Replied to answer on septiembre 26, 2023 at 12:31 pm

          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

            • 0
          • Responder
          • Compartir
            Compartir
            • Compartir en Facebook
            • Compartir en Twitter
            • Compartir en LinkedIn
            • Compartir en WhatsApp
          • rcocchiararo
            rcocchiararo
            2023-09-26T12:58:11+00:00Replied to answer on septiembre 26, 2023 at 12:58 pm

            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?.

              • 0
            • Responder
            • Compartir
              Compartir
              • Compartir en Facebook
              • Compartir en Twitter
              • Compartir en LinkedIn
              • Compartir en WhatsApp
            • WALL-E
              WALL-E
              2023-09-26T14:47:59+00:00Replied to answer on septiembre 26, 2023 at 2:47 pm

              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

                • 1
              • Compartir
                Compartir
                • Compartir en Facebook
                • Compartir en Twitter
                • Compartir en LinkedIn
                • Compartir en WhatsApp
      • rcocchiararo
        rcocchiararo
        2023-09-26T12:47:14+00:00Replied to answer on septiembre 26, 2023 at 12:47 pm

        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:

        from selenium.webdriver.remote.webelement import WebElement
        from selenium.webdriver.support.ui import WebDriverWait
        from selenium.webdriver.common.by import By
        webdriver = GetGlobals(«web»)
        if webdriver.driver_actual_id in webdriver.driver_list:
        driver = webdriver.driver_list[webdriver.driver_actual_id]

        # Primero seleccionas el padre del primer shadow-root
        shadow_host = driver.find_element(By.CSS_SELECTOR, ‘mds-data-table-for-accounts’)
        # Estas siguientes tres líneas son siempre igual
        shadow_root_dict = driver.execute_script(‘return arguments[0].shadowRoot’,shadow_host)
        shadow_root_id = shadow_root_dict[‘shadow-6066-11e4-a52e-4f735466cecf’]
        shadow_root = WebElement(driver, shadow_root_id, w3c=True)
        # Cuando ingresas al ultimo shadow-root, solo debes obtener el elemento que corresponda con el iframe al que debes ingresar
        #shadow_content = shadow_root.find_element(By.CSS_SELECTOR, ‘row-header-row0-column0’)
        # Y para finalizar, utilizas el comando que cambia al iframe
        #driver.switch_to_frame(shadow_content)

        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?

          • 0
        • Responder
        • Compartir
          Compartir
          • Compartir en Facebook
          • Compartir en Twitter
          • Compartir en LinkedIn
          • Compartir en WhatsApp
    2. rcocchiararo
      rcocchiararo
      2023-09-26T20:09:00+00:00Added an answer on septiembre 26, 2023 at 8:09 pm

      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 😛 )

        • 0
      • Responder
      • Compartir
        Compartir
        • Compartir en Facebook
        • Compartir en Twitter
        • Compartir en LinkedIn
        • Compartir en WhatsApp
      • rcocchiararo
        rcocchiararo
        2023-09-26T20:36:32+00:00Replied to answer on septiembre 26, 2023 at 8:36 pm

        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

          • 0
        • Responder
        • Compartir
          Compartir
          • Compartir en Facebook
          • Compartir en Twitter
          • Compartir en LinkedIn
          • Compartir en WhatsApp

    Leave an answer
    Cancelar la respuesta

    You must login to add an answer.


    Forgot Password?

    Need An Account, Sign Up Here

    Sidebar

    Realizar Pregunta

    Stats

    • Preguntas : 1k
    • Respuestas : 2k
    • Posts : 0
    • Comentarios : 0
    • Mejores Respuestas : 163
    • Usuarios : 5k
    • Populares
    • Comentarios
    • Tags

    Related Questions

      • Respuestas: 0

      Como puedo actualizar un campo Usando HTTP CONNECTION utilizando metodo ...

      • Respuestas: 0

      Grabar un documento .docx o .xml a .htm/.html

      • Respuestas: 2

      Git Source control

      • Respuestas: 0

      Ayuda, existe algun addons de email gmail o outlook para ...

      • Respuestas: 7

      Alguna recomendación por favor para un texto pasarlo a Excel ...

    Users

    Explore

    • Home
    • Popular
    • Categorías
    • Tags
    • Preguntas
      • Nuevas Preguntas
      • Más votadas
      • Más visitadas
      • Más respondidas

    Footer

    rocketbot white

    Rocketbot SpA | Todos los derechos reservados 2018 - 2020

    © 2020 Discy. All Rights Reserved
    With Love by 2code.

    es_ES
    en_US es_ES

    Insertar/editar un enlace

    Introduce la URL de destino

    O enlaza a contenido ya existente

      No se ha especificado ningún término de búsqueda. Mostrando los elementos recientes. Busca o utiliza las teclas de flecha arriba y abajo para seleccionar un elemento.