Sign InSign Up

Rocketbot Forum

Rocketbot Forum Logo Rocketbot Forum Logo

Rocketbot Forum Navigation

  • Academy Rocketbot
  • Tutorials
  • Documentación
Search
Ask A Question

Mobile menu

Close
  • Home
  • Popular
  • Categories
  • Tags
  • Questions
    • New Questions
    • Most voted
    • Most visited
    • Most Responded
  • Academy Rocketbot
  • Tutorials
  • Documentación
Home/ Questions/Q 14248
Next
In Process

Rocketbot Forum Latest Questions

rcocchiararo
  • 0
  • 0
rcocchiararo
Asked: September 25, 20232023-09-25T19:57:48+00:00 2023-09-25T19:57:48+00:00In: 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 Answers
  • 4k Views
  • 0 Followers
  • 0
Share
  • Facebook

    8 Answers

    • Voted
    • Oldest
    • Recent
    1. WALL-E
      WALL-E
      2023-09-26T12:13:18+00:00Added an answer on September 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
      • Reply
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
      • rcocchiararo
        rcocchiararo
        2023-09-26T12:20:54+00:00Replied to answer on September 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
        • Reply
        • Share
          Share
          • Share on Facebook
          • Share on Twitter
          • Share on LinkedIn
          • Share on WhatsApp
        • WALL-E
          WALL-E
          2023-09-26T12:31:23+00:00Replied to answer on September 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
          • Reply
          • Share
            Share
            • Share on Facebook
            • Share on Twitter
            • Share on LinkedIn
            • Share on WhatsApp
          • rcocchiararo
            rcocchiararo
            2023-09-26T12:58:11+00:00Replied to answer on September 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
            • Reply
            • Share
              Share
              • Share on Facebook
              • Share on Twitter
              • Share on LinkedIn
              • Share on WhatsApp
            • WALL-E
              WALL-E
              2023-09-26T14:47:59+00:00Replied to answer on September 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
              • Share
                Share
                • Share on Facebook
                • Share on Twitter
                • Share on LinkedIn
                • Share on WhatsApp
      • rcocchiararo
        rcocchiararo
        2023-09-26T12:47:14+00:00Replied to answer on September 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
        • Reply
        • Share
          Share
          • Share on Facebook
          • Share on Twitter
          • Share on LinkedIn
          • Share on WhatsApp
    2. rcocchiararo
      rcocchiararo
      2023-09-26T20:09:00+00:00Added an answer on September 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
      • Reply
      • Share
        Share
        • Share on Facebook
        • Share on Twitter
        • Share on LinkedIn
        • Share on WhatsApp
      • rcocchiararo
        rcocchiararo
        2023-09-26T20:36:32+00:00Replied to answer on September 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
        • Reply
        • Share
          Share
          • Share on Facebook
          • Share on Twitter
          • Share on LinkedIn
          • Share on WhatsApp

    Leave an answer
    Cancel reply

    You must login to add an answer.


    Forgot Password?

    Need An Account, Sign Up Here

    Sidebar

    Ask A Question

    Stats

    • Questions : 1k
    • Answers : 2k
    • Posts : 0
    • Comments : 0
    • Best Answers : 163
    • Users : 5k
    • Popular
    • Comments
    • Tags

    Related Questions

      • Answers: 0

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

      • Answers: 0

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

      • Answers: 2

      Git Source control

      • Answers: 0

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

      • Answers: 7

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

    Users

    Explore

    • Home
    • Popular
    • Categories
    • Tags
    • Questions
      • New Questions
      • Most voted
      • Most visited
      • Most Responded

    Footer

    rocketbot white

    Rocketbot SpA | Todos los derechos reservados 2018 - 2020

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

    en_US
    es_ES en_US

    Insert/edit link

    Enter the destination URL

    Or link to existing content

      No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.