【问题标题】:How to retrieve the text from an input element?如何从输入元素中检索文本?
【发布时间】:2019-08-25 23:06:47
【问题描述】:

我正在使用 python 和 selenium 访问一个生成随机电子邮件的网站。我正在尝试将该电子邮件存储在一个变量中并返回它。

def getemail(self):

    driver = self.driver
    driver.get("https://temp-mail.org/en/")
    time.sleep(2)
    ne = driver.find_element_by_xpath("//*[@id='mail']").text
    return ne

【问题讨论】:

  • 欢迎来到 Stack Overflow!这是一种经常出现的 Selenium 问题,但并不是一个很好的 SO 问题;您的定位器可能没有正确写入。请关注this guide 解决在 Selenium 中找不到元素的调试问题。
  • 您确定 driver.get("temp-mail.org/en/") 工作正常吗?先尝试打印“驱动程序”变量。这样,您就可以知道问题出在此处或下一行 :)跨度>

标签: python selenium xpath css-selectors webdriverwait


【解决方案1】:

它是<input>,并且电子邮件在其属性value="" 中,而不是作为开始和结束标记之间的文本。

ne = driver.find_element_by_xpath("//*[@id='mail']").get_attribute("value")

编辑: 正如@JeffC 在评论中建议的那样,它可以使用find_element_by_id

ne = driver.find_element_by_id("mail").get_attribute("value")

【讨论】:

  • 如果您只想通过 ID 搜索元素,请使用*_by_id()。没有理由不这样做。我知道 OP 发布了这一点,但是当我们可以改进他们的代码时,我们应该建议最佳实践,即使这不是特别要求的。
  • @JeffC 你是对的。坦率地说,我什至没有看 xpath。我只检查了最后是否没有_elements_"s" :)
【解决方案2】:

@furas 的答案非常接近。但是,要提取 随机电子邮件地址,您必须为 visibility_of_element_located() 诱导 WebDriverWait,您可以使用以下任一 Locator Strategies

  • 使用CSS_SELECTOR

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input#mail"))).get_attribute("value"))
    
  • 使用XPATH

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='mail']"))).get_attribute("value"))
    
  • 注意:您必须添加以下导入:

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

【讨论】:

    【解决方案3】:

    请通过get_attribute 获取。

    将代码的倒数第二行更改为:

    ne = driver.find_element_by_id("mail").get_attribute("value")
    

    【讨论】:

      猜你喜欢
      • 2021-10-15
      • 2015-06-03
      • 2015-10-23
      • 2017-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2016-09-01
      相关资源
      最近更新 更多