2011-11-28 96 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')) 
相關問題