2013-12-17 2 views
3

Я хочу извлечь текст между <tag></tag> (В моем случае, <tr></tr>). поэтому я использую webelement.textwebelement.text не работает (браузер = webdriver.Firefox)

self.browser = webdriver.Firefox() 
table = self.browser.find_element_by_tag_name('table') 
.... 
rows = table.find_elements_by_tag_name('tr') 
print rows 
for element in rows: 
    print type(element) 
    print element.text 
    print type(element.text) 

и выходе:

[<selenium.webdriver.remote.webelement.WebElement object at 0x0151E390>] # <-print rows 
<class 'selenium.webdriver.remote.webelement.WebElement'> # <-print type(element) 
# <-nothing from print element.text 
<type 'unicode'> # <-print type(e.text) 

Так что нет ничего от element.text, но теги не является пустым. <tr>blablabla</tr>

У меня нет возможности проверить его на других браузерах.

Проблема с <tr> Он не видите текст внутри <tr>blabla</tr>:

rows = table.find_elements_by_tag_name('tr') будет emplty.

Но увидеть его в <tr><td>blabla</td></tr>:

rows = table.find_elements_by_tag_name('tr') 
for element in rows: 
    print element.text # <-blabla 

Хотя, он не работает на любой вложенного элемента:

<tr><h1>blabla</h1></tr>: 

rows = table.find_elements_by_tag_name('tr') будет emplty. documentation на webelement.text говорит только

текст

Gets the text of the element. 

Его просто не рассматривать текст внутри <tr>text</tr> как текст <tr> элемента, я полагаю.

+1

Покажите нам HTML испытывается против. – Arran

+0

Все нормально с HTML, он отслеживает число элементов, то вернуть правильный element.tag_name '

блаблабла
' – proxy

+0

BTW его проект Django – proxy

ответ

1

Только угадывание, но это текст, который вы ищете на самом деле в дочернем узле (<td>, может быть?)?

Я не уверен, как работает pythons webelement.text, но, возможно, вам нужно получить текст дочерних элементов.

EDIT: Я думаю, ваша проблема может быть на самом деле, что наличие текста между тегами <tr> недействителен HTML, и не хранится в DOM, как вы могли бы ожидать.

Когда я создаю простую таблицу с текстом в строке ...

<body> 
    <table border="1"> 
    <tr> 
     <td>Text in 1st cell</td> 
    </tr> 
    <tr> 
     <td>Text in 2nd cell</td> 
    </tr> 
    <tr> 
     Text in 3rd Row 
    </tr> 
    </table> 
</body> 

В результате DOM выглядит на самом деле, как это ...

<body> 
    Text in 3rd Row 
    <table border="1"> 
    <tbody> 
     <tr> 
     <td>Text in 1st cell</td> 
     </tr> 
     <tr> 
     <td>Text in 2nd cell</td> 
     </tr> 
     <tr></tr> 
    </tbody> 
    </table> 
</body> 

Таким образом, вы можете видеть, что есть на самом деле ISN» t любой текст в третьем <tr>, который объясняет, что вы видите.

Так пожалуйста, напишите ваш фактический HTML/DOM, так что мы можем увидеть, если есть на самом деле любой текст внутри тега вы ожидающей

+0

Его не дочерний узел. – proxy

0

кажется, что вы можете поразить какую-то ошибку.Вот связанный пост, где они описывают, что Firefox возвращает пустой текст, если элемент не отображается во время вызова webelement.text. Они также предлагают решение, прокручивая элемент с помощью javascript.

Проверьте, не влияет ли ваша версия Firefox и пытайтесь обновить или применить обходной путь.

Пожалуйста, сообщите нам, как вы прогрессируете!

Ссылка: WebElement getText() is an empty string in Firefox if element is not physically visible on the screen

+0

В моем случае это физически видно. – proxy

+0

Можете ли вы поделиться веб-страницей, которую используете, чтобы я мог проверить ее на своем компьютере? Также, пожалуйста, поделитесь версией selenium/python. –

+0

См. Принятый ответ. – proxy

0

Try с таблицей имен тегов

rows = table.find_elements_by_tag_name('Table') 
print rows 
for element in rows: 
    print type(element) 
    print element.text 
    print type(element.text) 
+0

Это не помогает. – proxy

0

У меня была такая же проблема. Я перечислил все элементы тд и находит 5 из них вместо 1. Я взял текст последнего одного элем [-1] .text и workred для меня

(Pdb) elem = self.wd.find_elements_by_xpath(".//*[@id='rf_version_details_info']/tbody/tr[3]/td[2]") 
(Pdb) for i in elem: print i, i.text 
<selenium.webdriver.remote.webelement.WebElement object at 0x036364D0> 
<selenium.webdriver.remote.webelement.WebElement object at 0x03636610> 
<selenium.webdriver.remote.webelement.WebElement object at 0x03636550> 
<selenium.webdriver.remote.webelement.WebElement object at 0x03636650> Aug. 8, 2014 at 17:01 (UTC) 
<selenium.webdriver.remote.webelement.WebElement object at 0x03636630> Aug. 8, 2014 at 17:01 (UTC) 
Смежные вопросы