0
votes

Le sélénium n'est pas en mesure de trouver le champ Nom dans la page d'inscription Twitter

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?

1 commentaires

J'ai essayé $ x ("/ html / dang / div / div / div [2] / main / div / div / div / div / div [2] / di v [2] / div / div [4 ] ") 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 ...


5 Réponses :


0
votes

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.


1 commentaires

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 :)



1
votes

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)


0 commentaires

0
votes

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()


0 commentaires

0
votes

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()


0 commentaires

1
votes

Les éléments dans page Twitter Page sont réagit éléments. Donc, pour envoyer une séquence em> em> au champ NAME FORT>, vous devez induire webDriverwait pour le ollement_to_be_clickable () code> et vous pouvez utiliser l'un des éléments suivants Stratégies de localisation :

  • en utilisant 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
    
  • en utilisant 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")
    
  • note forte>: Vous devez ajouter les importations suivantes: p>

    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")
    
  • Snapshot de navigateur: P> li> ul>

     nom_name p>


    référence h2>

    Vous pouvez trouver une discussion pertinente détaillée dans: p>


0 commentaires