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>
3 Réponses :
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()
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.
@ wmoura12 J'ai mis à jour ma réponse, veuillez vérifier la réponse mise à jour.
@ wmoura12 laissez-moi savoir si la réponse mise à jour fonctionne pour vous
Merci beaucoup. Ça marche, mais les send_keys ont échoué.browser.switch_to.frame (browser.find_element_by_name ( "gwtIndex")) pc = browser.find_element_by_name ("PURCHASE_ORDER_CODE_NAME"). Cli ck () pc.send_keys ("7555425-1" ) - L'objet 'NoneType' n'a pas d'attribut 'send_keys'
@ wmoura12 a mis à jour ma réponse. Veuillez vérifier maintenant et laissez-moi savoir si cela fonctionne
Votre premier bloc de code a pc = .... cliquez sur ()
. .click ()
renvoie void
donc rien ne sera assigné dans pc
et cela générera probablement une erreur. Vous avez tout compris dans le troisième bloc, mettez simplement à jour le premier bloc pour supprimer le pc =
pour éviter le problème.
@JeffC ouais en fait, j'ai mis à jour la réponse après discussion avec l'OP, juste manqué de mettre à jour le premier bloc. Merci de l'avoir mentionné !!
@ wmoura12 Regardez à nouveau son troisième bloc de code et synchronisez votre code pour qu'il corresponde. Je pense que vous utilisez une version obsolète du code. Voir mon commentaire jusqu'à deux pour savoir pourquoi vous obtenez l'erreur.
L'élément souhaité est un élément dynamique donc pour invoquer Utilisation de Utilisation de Remarque : vous devez ajouter les importations suivantes: click ()
sur l'élément vous devez induire WebDriverWait pour que l'élément soit cliquable em > et vous pouvez utiliser l'une des Stratégies de localisation :
CSS_SELECTOR
: from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
XPATH
: WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class=' x-form-field x-form-text ' and contains(@id,'-input')][@name='PURCHASE_ORDER_CODE_NAME']"))).click();
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.x-form-field.x-form-text[id$='-input'][name='PURCHASE_ORDER_CODE_NAME']"))).click();
Merci pour votre réponse. Ce code a renvoyé Timeout. TimeoutException: Message:
TimeoutException est le résultat de échec conditions attendues . Déboguez votre code via find_element_by_ *
en conjonction avec time.sleep ()
. Si vous parvenez à localiser l'élément, mettez à jour la question avec les observations.
Vous pouvez peut-être essayer une autre approche de "sélecteur". Ex (Javascript):
selenium.By.xpath('//*[@data-icon="edit"]') driver.findElement(by).click()
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?