如何用webdriver获取textarea的文本内容?

8 投票
3 回答
10388 浏览
提问于 2025-04-17 07:16

我正在尝试使用Python中的webdriver获取HTML表单中一个文本区域的内容。

我能获取到文本,但换行符却不见了。selenium的文档几乎没什么用;它们只说:

class selenium.webdriver.remote.webelement.WebElement(parent, id_)

[...]

text: 获取元素的文本。

我现在的做法是:

from selenium import webdriver

# open the browser and web site
b = webdriver.Firefox()
b.get('http://www.example.com')

# get the textarea element
textbox = b.find_element_by_name('textbox')

# print the contents of the textarea
print(repr(textbox.text))

这段代码打印出文本区域内容的Python Unicode字符串表示,但所有的换行都被空格替代了。真是糟糕!

我不确定这是文本编码的问题,selenium/webdriver的bug(在追踪器里找不到),还是用户操作错误。

有没有其他方法可以做到这一点呢?

编辑:我刚试了一下Chrome...一切正常。我向selenium的bug追踪器报告了一个bug。Sam的解决方法(下面的被接受答案)在Firefox中也有效,但有一个注意事项:返回的字符串中的符号会被转换成HTML实体代码。这没什么大不了

3 个回答

0

在Python中,先获取元素,然后再获取它的属性值。可以使用函数get_attribute('value')来实现。

from selenium import webdriver

driver = webdriver.Firefox()
URL = "http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_textarea"
driver.get(URL)
driver.switch_to.frame("iframeResult")
# get the textarea element by tag name
textarea = driver.find_element_by_tag_name('textarea')

# print the attribute of the textarea
print(textarea.get_attribute('value'))
print(textarea.get_attribute('rows'))
print(textarea.get_attribute('cols'))
7

我刚刚获取了textarea标签的属性值。下面是一段Java代码的示例。

WebElement textarea = driver.findElement(By.id("xf-1242"));         
String text = textarea.getAttribute("value");
log.debut(text);

我正在使用Chrome驱动,上面的代码将一段文本(在我的例子中是XML)和换行符放入日志中。这个想法是从这个链接上得到的。

Jan

4

作为一种解决方法,你可以试试用 ExecuteScript 来获取内嵌的 HTML 内容。我不是 Python 专家,但这里有个 C# 的例子:

IWebElement element = ...
String returnText = ((IJavaScriptExecutor)webDriver).ExecuteScript("return arguments[0].innerHTML", element).ToString();

撰写回答