driver = webdriver.Chrome() driver.get("https://twitter.com/i/flow/signup") driver.implicitly_wait(10) setname = driver.find_element_by_name("name") setname.click() setname.send_keys("NAME SURNAME") driver.implicitly_wait(10) emailoption = driver.find_element_by_xpath("/html/body/div/div/div/div[2]/main/div/div/div/div[2]/div[2]/div/div[4]") #selenium can not find the element XPATH (I found it manually) emailoption.click() #need to click in the element :) driver.close() Selenium can not find the element XPATH (I found it manually) ---Use email instead---. Tried to find this element other ways... same result. Maybe there is another way to click in it?
5 Réponses :
J'ai couru votre code sur mon ordinateur et cela a fonctionné parfaitement, trouvant l'option email et en cliquant dessus. J'ai également trouvé le même xpath que vous avez fourni, avez-vous essayé d'exécuter votre programme dans un débogueur et de quel éditeur IDE / TEXT utilisez-vous? En outre, laissez-vous la fenêtre ouverte lorsque vous exécutez votre programme? Si vous fermez la fenêtre, vous lancerez une erreur. Si vous avez plus de détails sur ce qui se passe lorsque vous exécutez votre code, faites-le-moi savoir que j'aimerais aider. P>
J'utilise Pycham, et gardez la fenêtre ouverte. C'est une erreur NosuchelementExceptionException. Désolé pour le désagrément et merci de votre attention :)
Ajouter un sélénium code> Condition attendue (
ollement_to_be_clickable code>) à votre code et utilisez Relative XPath. Pour entrer votre nom
nom code>,
Cliquez sur CODE> sur le lien et entrez votre adresse électronique code>, vous pouvez utiliser:
name = "your_name"
email = "your_email"
elem = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@autocomplete='name']")))
self.driver.execute_script("arguments[0].setAttribute('value', '" + name +"')", elem)
elem2 = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@autocomplete='tel']/following::span[1]']")))
self.driver.execute_script("arguments[0].click();", elem2)
elem3 = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@autocomplete='email']")))
self.driver.execute_script("arguments[0].setAttribute('value', '" + email +"')", elem3)
Essayez ci-dessous le code -
from selenium import webdriver from selenium.webdriver import ActionChains from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time driver = webdriver.Chrome() action = ActionChains(driver) wait = WebDriverWait(driver, 20) driver.get('https://twitter.com/i/flow/signup') time.sleep(5) # Add wait here so that twitter login page will load. NameElement = driver.find_element_by_xpath("//input[@name='name']") action.move_to_element(NameElement).click().perform() NameElement.send_keys("Hello") EmailOption = driver.find_element_by_xpath('//span[text()="Use email instead"]/parent::div') EmailOption.click() driver.close()
Essayez ci-dessous Code:
wait = WebDriverWait(driver, 10) driver.get("https://twitter.com/i/flow/signup") driver.implicitly_wait(10) setname = driver.find_element_by_name("name") setname.click() setname.send_keys("NAME SURNAME") driver.implicitly_wait(10) element1 = wait.until(EC.element_to_be_clickable((By.XPATH, "//body//div[4]"))) element1.click()
Les éléments dans page Twitter Page sont réagit éléments. Donc, pour envoyer une séquence em> em> au champ en utilisant en utilisant note forte>: Vous devez ajouter les importations suivantes: p>
Snapshot de navigateur: P>
li>
ul> Vous pouvez trouver une discussion pertinente détaillée dans: p> ollement_to_be_clickable () code> et vous pouvez utiliser l'un des éléments suivants Stratégies de localisation :
css_selector code>: p>
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
xpath code>: p>
driver.get("https://twitter.com/i/flow/signup")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@name='name']"))).send_keys("Manoel Augusto")
driver.get("https://twitter.com/i/flow/signup")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='name']"))).send_keys("Manoel Augusto")
référence h2>
J'ai essayé
$ x ("/ html / dang / div / div / div [2] / main / div / div / div / div / div [2] / di v [2] / div / div [4 ] ") code> dans une console et fini avec un tableau vide. Lorsque je navigue à cet élément et copiez son xpath, j'obtiens ce
/ html / corps / div / div / div / div [1] / div [2] / div / div / div / div / div / div / div / div / div / div [2] / DIV [2] / DIV / DIV / D IV [2] / DIV [2] / DIV / DIV / DIV [4] / SPAN CODE> ...