Selenium无法在Twitter注册页面中找到名称字段

2024-10-01 02:40:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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()
  1. Selenium找不到元素XPATH(我是手动找到的)--Use email instead--
  2. 试图以其他方式找到此元素。。。同样的结果
  3. 也许还有别的方法可以点击它

Tags: thenamediv元素bydriverelementfind
3条回答

我在我的电脑上运行了你的代码,它工作得很好,找到了电子邮件选项并点击它。我还发现了与您提供的相同的xpath,您是否尝试在调试器中运行程序,以及您使用的是哪种IDE/文本编辑器?另外,在运行程序时,是否让窗口保持打开状态?如果你关闭窗口,它将抛出一个错误。如果您对运行代码时发生的事情有任何详细信息,请告诉我,我很乐意提供帮助

在代码中添加Selenium预期条件(element_to_be_clickable),并使用相对XPath。要在链接上输入您的nameclick并输入您的email,您可以使用:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@autocomplete='name']"))).send_keys('name')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@autocomplete='tel']/following::span[1]']"))).click()
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@autocomplete='email']"))).send_keys('email')

请确保添加以下导入:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

如果仍然失败,您可以使用Javascript:

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)

Twitter Signup页中的元素是React元素。因此,要将字符序列发送到Name字段,必须为element_to_be_clickable()引入WebDriverWait,并且可以使用以下Locator Strategies之一:

  • 使用CSS_SELECTOR

    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")
    
  • 使用XPATH

    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")
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照:

twitter_name


参考文献

您可以在以下内容中找到详细的相关讨论:

相关问题 更多 >