en pagina
https://www.virustotal.com/gui/home/upload
necesito hacer clic en "Elegir archivo" pero tengo Mensaje: error de javascript: el argumento no está definido
var1 = sys.argv[1] path = os.path.abspath(var1) driver.get("https://www.virustotal.com/gui/home/upload") element = driver.execute_script('return document.querySelector("#view-container > home-view").shadowRoot.querySelector("#uploadForm").shadowRoot.querySelector("#infoIcon").shadowRoot.querySelector("#wrapperLink")') driver.execute_script('argument[0].click();', element)Cómo definir este elemento. Me gustaría enviar un archivo para verificar usando el script
Aquí hay algo que funciona.
element = driver.execute_script('return document.querySelector("#view-container > home-view").shadowRoot.querySelector("#uploadForm").shadowRoot') file_element = element.find_element(By.CSS_SELECTOR, "#fileSelector") file_element.send_keys(r"your_file_path/filename.extn")Envía el archivo desde el backend sin hacer clic en el botón y abrir el cuadro de diálogo del archivo.
Código alternativo:
def open_shadow_root(element): shadow_root = driver.execute_script('return arguments[0].shadowRoot', element) return shadow_root driver.get("https://www.virustotal.com/gui/home/upload") time.sleep(5) root_1 = driver.find_element(By.CSS_SELECTOR, "#view-container > home-view") sroot_1 = open_shadow_root(root_1) print(sroot_1) time.sleep(4) root_2 = sroot_1.find_element(By.CSS_SELECTOR, "#uploadForm") sroot_2 = open_shadow_root(root_2) time.sleep(4) file_element = sroot_2.find_element(By.CSS_SELECTOR, "#fileSelector") file_element.send_keys(r"your_file_path/filename.extn") time.sleep(4) driver.quit() Hace el mismo trabajo que el código anterior; es solo que he escrito una función de raíz de sombra y la utilizo para abrir las raíces de sombra. Esto parece un poco más legible en mi opinión, pero no se puede evitar usar el código anterior. Además, he usado time.sleep() que se puede reemplazar con WebdriverWait si es posible.
Si aún desea hacer clic en el botón Choose File y trabajar en el cuadro de diálogo del archivo, puede intentar lo siguiente:
element = driver.execute_script('return document.querySelector("#view-container > home-view").shadowRoot.querySelector("#uploadForm").shadowRoot') choose_file = element.find_element(By.CSS_SELECTOR, "#infoIcon") choose_file.click()Alterno:
def open_shadow_root(element): shadow_root = driver.execute_script('return arguments[0].shadowRoot', element) return shadow_root driver.get("https://www.virustotal.com/gui/home/upload") time.sleep(4) root_1 = driver.find_element(By.CSS_SELECTOR, "#view-container > home-view") sroot_1 = open_shadow_root(root_1) print(sroot_1) time.sleep(4) root_2 = sroot_1.find_element(By.CSS_SELECTOR, "#uploadForm") sroot_2 = open_shadow_root(root_2) time.sleep(4) choose_file = sroot_2.find_element(By.CSS_SELECTOR, "#infoIcon") choose_file.click() # ... choose the file .... driver.quit()