2011-11-28 91 views
7

我试图使用webdriver in Python以HTML形式获取textarea的内容。如何使用webdriver获取textarea的文本内容?

我收到了文本,但是新行符丢失。 selenium docs几乎没用;他们说:

类selenium.webdriver.remote.webelement.WebElement(父,ID_)

[...]

文本:获取元素的文本。

我目前做如下:

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字符串的表示,除了所有的新行已被替换空间。卫生署!

不知道我是否面临文本编码问题,硒/ webdriver错误(无法在跟踪器中找到它)或用户错误。

有没有不同的方法来做到这一点?

编辑:我只是给了Chrome一试...工作正常。我向硒问题追踪报告了一个bug。山姆的解决方法(下面接受的答案)适用于Firefox,但需要注意:符号在返回的字符串中转换为HTML实体代码。这是no big deal

回答

4

作为解决方法,您可以尝试使用ExecuteScript来获取innerHtml。我不是Python的家伙,但它在C#中:

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

很棒的建议。这工作几乎完美。唯一的问题是符号在结果字符串中被转换成它们的HTML实体代码。即'<'变成'<',依此类推。我投了一些低级别的Python法术并缓解了这个问题。 –

+4

作为参考,等效的Python代码是'text = my_web_driver.execute_script(“return arguments [0] .innerHTML”,textarea_element)'。 –

+1

在Python中,'xml.sax.sax.sutils.unescape(文本)'不会转义'&','<' and '>'实体。 –

7

我刚刚得到了标签textarea的属性值。以下是Java代码的示例。

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

我使用Chrome的驱动程序,和上面的代码把一个文本(在我的情况下,XML)与日志换行。 我从http://www.w3schools.com/jsref/dom_obj_textarea.asp

上心扬

0

在Python首先取得元素,并经过获取属性值,在python get_attribute(“值”)函数。

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')) 
相关问题