driver.get("https://www.virustotal.com/gui/home/search") sbox = driver.find_element_by_id("searchInput") sbox.send_keys("129.226.130.245") sbox.send_keys(Keys.ENTER) Please suggest, on how to pass values to search box
4 Réponses :
D'après ce que je peux voir, l'élément que vous essayez de rechercher n'est pas un élément input
.
Vous seriez intéressé par la balise INPUT
, plutôt que par certains div
. Vous devez donc être plus précis, quelque chose comme
driver.findElement (By.xpath ("// div [@ id = 'searchInput'] // input"))
Cette syntaxe peut ne pas être correcte, car son programme en cours d'exécution n'a pas été testé. Mais vous voudrez peut-être vous référer à ce fil afin d'obtenir une réponse plus précise. Localisation des nœuds enfants de WebElements dans le sélénium .
J'espère que cela vous aidera.
J'ai essayé les deux manières mais pas de chance sbox = driver.find_element_by_xpath ('// div [@ id =' searchInput '] // inpu t') sbox.send_keys ("129.226.130.245") sbox.send_keys (Keys.ENTER) sbox = driver.find_element_by_xpath ('// * [@ id = "input"]') sbox.send_keys ("129.226.130.245") sbox.send_keys (Keys.ENTER)
@ id = "input" ne fonctionnera pas, n'est-ce pas? l'entrée est le type, pas l'ID.
AFAICT, le site Web que vous essayez d'automatiser n'est pas capable de faire interagir Selenium WebDriver. Cela pourrait être de la forme de sécurité / pare-feu de son côté pour détecter Selenium Webdriver comme le robot de scrape ou qc ... La raison pour laquelle je dis cela, parce que même lorsque j'ai utilisé les outils de développement Chrome pour interroger la console, j'étais impossible d'obtenir l'élément, par exemple, obtenir le bouton Rechercher sur ce site:
document.getElementsByClassName('search-button')
puis il n'a rien renvoyé .
Je pense qu'il n'y a rien de mal dans vos scripts à part le site Web lui-même.
Merci d'avoir examiné cela. Existe-t-il une solution alternative pour que cela fonctionne
Le problème ici est que vous ne pouvez pas trouver les éléments qui se trouvent dans un #shadowroot
.
Vous pouvez résoudre ce problème en trouvant tous les shadowroots contenant l'élément que vous recherchez. Dans chacun des shadowroots, vous devrez utiliser querySelector
de javascript et trouver le shadowroot suivant, jusqu'à ce que vous puissiez accéder à l'élément que vous recherchiez.
Procédez comme suit pour accéder à l'entrée de recherche que vous cherchiez pour:
driver =webdriver.Chrome() driver.get("https://www.virustotal.com/gui/home/search") # wait a bit untill search pops up time.sleep(2) # Retrieve the last shadowroot using javascript javascript = """return document .querySelector('vt-virustotal-app').shadowRoot .querySelector('home-view').shadowRoot .querySelector('vt-ui-search-bar').shadowRoot .querySelector('vt-ui-text-input').shadowRoot""" shadow_root = driver.execute_script(javascript) # Find the input box sbox = shadow_root.find_element_by_id("input") sbox.send_keys("129.226.130.245") sbox.send_keys(Keys.ENTER)
Le champ recherche avec le texte espace réservé comme URL, adresse IP, domaine ou hachage de fichier
dans le Le site Web https://www.virustotal.com/gui/home/search se trouve au plus profond de plusieurs # shadow-root (open)
.
Pour envoyer une séquence de caractères à la recherche , vous devez utiliser shadowRoot .querySelector ()
et vous pouvez utiliser ce qui suit Stratégie de localisation :
Bloc de code:
from selenium import webdriver import time options = webdriver.ChromeOptions() options.add_argument("start-maximized") options.add_experimental_option("excludeSwitches", ["enable-automation"]) options.add_experimental_option('useAutomationExtension', False) driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe') driver.get("https://www.virustotal.com/gui/home/search") time.sleep(7) search_field = driver.execute_script("return document.querySelector('vt-virustotal-app').shadowRoot.querySelector('vt-auth-checker home-view').shadowRoot.querySelector('vt-ui-search-bar').shadowRoot.querySelector('vt-ui-text-input').shadowRoot.querySelector('input#input')") search_field.send_keys("129.226.130.245")
Instantané du navigateur:
Vous pouvez trouver quelques discussions pertinentes dans: