【问题标题】:Python selenium sending keys into textareaPython selenium 将密钥发送到 textarea
【发布时间】:2016-08-05 11:26:50
【问题描述】:

我正在使用 Python 3.4.4 访问具有文本区域的网站 (https://readability-score.com/),该文本区域在添加新值时会动态更新。

我正在尝试在该 textarea 框中输入一个字符串,但它对我不起作用。

这是我正在尝试的代码:

driver = webdriver.Firefox()
driver.wait = WebDriverWait(driver, 2)
URL = "https://readability-score.com/"

text = "Hello hello hello, this is a test"

driver.get(URL)
time.sleep(2)
driver.find_element_by_id("text_to_score").clear()
driver.find_element_by_id("text_to_score").send_keys(text)
#driver.find_element_by_xpath("/html/body/div[1]/div[6]/div/div[1]/form/fieldset/textarea").clear()
#driver.find_element_by_xpath("/html/body/div[1]/div[6]/div/div[1]/form/fieldset/textarea").send_keys(text)

问题是 selenium 驱动程序找不到将密钥发送到的文本区域。我认为它能够清除它(因为我可以从字面上看到当您进入页面时正在清除的文本)但无法输入任何文本。有人对此有任何想法吗?我遵循了在线指南,但我觉得我已经尝试了列出的所有选项 (http://selenium-python.readthedocs.org/)。谢谢。

【问题讨论】:

  • 错误是什么?
  • 哦,是的,好点。我将对此进行编辑,但错误是硒驱动程序无法将文本发送到文本区域。
  • 嗯,在 send_keys 语句之后放一些延迟,这样你就可以真正看到你的文本是否进入了 textarea ?
  • 对我来说仍然一无所有。即使有延迟
  • clear 语句是否清除了默认文本?如果是,则尝试删除该语句并仅使用 send_keys() 语句

标签: python selenium


【解决方案1】:

这对我有用

textarea = driver.find_element(By.ID, "text_to_score")
textarea.click()
textarea = driver.find_element(By.NAME, "text_to_score")
textarea.send_keys('your text')

您可以使用不同的元素将文本输入到一个字段文本区域。

【讨论】:

    【解决方案2】:

    “send_keys”函数只对您输入的字符串进行 TYPES,但不会“发送”键,这可能看起来违反直觉。提交 textarea 的正确方法是使用简单的

    driver.find_element_by_id("text_to_score").submit()
    

    textarea = driver.find_element_by_id("text_to_score")
    textarea.submit()
    

    【讨论】:

      【解决方案3】:

      You can explicitly wait 直到出现文本区域。

      from selenium.webdriver.common.by import By
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      
      
      ...
      
      
      url = "https://readability-score.com/"
      text = "Hello hello hello, this is a test"
      
      driver.get(url)
      WebDriverWait(driver, 5).until(
          EC.presence_of_element_located((By.ID, "text_to_score"))
      )  # Wait until the `text_to_score` element appear (up to 5 seconds)
      driver.find_element_by_id("text_to_score").clear()
      driver.find_element_by_id('text_to_score').send_keys(text)
      

      【讨论】:

      • 问题不在于驱动找不到元素(因为我可以看到它清除了默认文本)而是无法输入文本
      • @user1342086,这很奇怪。它对我来说很完美(都适用于 Firefox、Chrome)。顺便说一句,你使用哪个版本的硒包?我正在使用 2.53.1。
      • 是的,你可能是对的。我对上面的示例文本撒了谎,实际上我正在使用 open 和 .read() 方法导入文本文件来引入文本。所以这是一个正确的解决方案(我没有尝试过,但看起来不错)。
      • 你能解释一下我们如何按回车键来发送我们的文本吗?
      • @hamed_baziyad,见[这个问题](见这个stackoverflow.com/questions/38312033/…)。如果这不能帮助您解决我们的问题,请使用您正在处理的 url(或 html)发布一个单独的问题(不是评论)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多