1
votes

Impossible de localiser l'erreur d'élément lors de la tentative de localisation d'un élément de zone de saisie à l'aide de Selenium via Python

J'essaye de trouver une zone de texte avec Python et Selenium .. J'ai essayé par_css_selector, par XPATH, par ID, par nom mais le message est toujours le même:

Impossible de localiser l'élément: # x-auto-225-input

c'est le morceau de html. Je veux trouver la zone de texte pour la remplir.

pc = browser.find_element_by_css_selector("#x-auto-225-input").click()
pc.send_keys("7555425-1")

Ma dernière tentative était:

<td class="x-table-layout-cell" role="presentation" style="padding: 2px;">
    <div role="presentation" class=" x-form-field-wrap  x-component" id="x-auto-225" style="width: 150px;"></div>
    <input type="text" class=" x-form-field x-form-text " id="x-auto-225-input" name="PURCHASE_ORDER_CODE_NAME" tabindex="0" style="width: 150px;">
</td>


5 commentaires

pouvez-vous s'il vous plaît fournir le html de votre page


avez-vous essayé find_element_by_name ("PURCHASE_ORDER_CODE_NAME")


si possible peut fournir le lien de votre page Web?


Bienvenue à SO. Utilisez la condition attendue et attendez que l'élément soit visible avant d'effectuer l'opération. Je ne vois aucun problème avec le localisateur ou le code.


Cet élément est-il dans un IFRAME? Avez-vous essayé une attente?


3 Réponses :


1
votes

En regardant le html, id mentionné peut être dynamique, donc vous ne pouvez pas mettre l'identifiant statique dans votre identifiant.
Cependant, comme l'attribut name est présent dans le html, vous pouvez l'utiliser pour identifier votre élément, comme:

browser.switch_to.default_content()

Réponse mise à jour selon la discussion avec le OP

Comme une iframe est présente sur l'interface utilisateur, vous devez d'abord basculer vers l'iframe, puis cliquer sur l'élément.
Pour passer à iframe , vous pouvez utiliser:

pc = browser.find_element_by_name("PURCHASE_ORDER_CODE_NAME")
pc.click()
pc.send_keys("7555425-1")

puis utiliser:

browser.switch_to.frame(browser.find_element_by_tag_name('iframe'))

si vous souhaitez revenir au contenu par défaut, vous pouvez utiliser:

browser.find_element_by_name("PURCHASE_ORDER_CODE_NAME").click()


10 commentaires

J'ai essayé: Impossible de localiser l'élément: [name = "PURCHASE_ORDER_CODE_NAME"]


@ wmoura12 pouvez-vous vérifier qu'il existe une iframe disponible dans le html?


Oui.

Articles qui pourrait vous intéresser :

"Autorisation refusée" essayant d'exécuter Python sur Windows 10
Administrateur Django: __str__ a renvoyé une non-chaîne (type int)
Comptage / Pivot du tableau avec plusieurs valeurs dans la cellule
Comment remplacer les valeurs vides par des nombres précédents dans les pandas