Python selenium将键入发送到文本区域

6
我将使用Python 3.4.4访问一个网站(https://readability-score.com/),该网站有一个文本区域,当添加新值时会动态更新。
我试图将字符串输入到该文本区域中,但它对我不起作用。
这是我正在尝试的代码:
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/)。谢谢。

哦,好的,很有道理。我会编辑这个问题,但错误在于Selenium驱动程序无法将文本发送到文本区域。 - rj2700
仍然没有任何反应。即使有延迟。 - rj2700
清除语句是否清除了默认文本?如果是,则尝试删除该语句并仅使用send_keys()语句。 - Hassan Mehmood
它确实清除了文本,但仍然没有输入进去... 嗯 - rj2700
不过看起来问题似乎不是出在Selenium上,而是出在文本上。所以我们一直做的都是正确的。我在输入文本时说了谎,那个字符串只是一个简单的打字示例,因为我认为所有字符串都是相同处理的,但我使用的真实字符串有1000多个单词,并通过使用open命令和read()从外部文本文件导入。这似乎是问题所在,但我正在尝试找到如何将整个文本输入到此区域的方法。 - rj2700
显示剩余4条评论
3个回答

7

您可以使用显式等待直到文本区域出现。

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)

问题不在于驱动程序找不到元素(因为我可以看到它清除默认文本),而是无法输入文本。 - rj2700
@user1342086,这很奇怪。它对我来说运行得非常完美(无论是在Firefox还是Chrome中)。顺便问一下,您使用的selenium软件包版本是哪个?我正在使用2.53.1。 - falsetru
是的,你可能是正确的。我在上面的示例文本中撒了谎,实际上我是使用打开和.read()方法导入文本文件的。所以这是一个正确的解决方案(我没有尝试过,但看起来很好)。 - rj2700
你能解释一下如何按回车键发送我们的文本吗? - user7621299
@falsetru 这并没有帮助到我。 - user7621299
显示剩余2条评论

3

“send_keys”函数只会输入您输入的字符串,但并不会“发送”按键,尽管这可能看起来有些违反直觉。通过简单地使用

标签,正确的方法是提交

0

这对我来说是有效的工作

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接