我想在<tag></tag>
之间提取文字(在我的情况下,<tr></tr>
)。所以,我正在使用webelement.text
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')
将会成功。
但它在<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')
将是真实的。
webelement.text
上的documentation只是
文本
Gets the text of the element.
我认为它只是不考虑
<tr>text</tr>
内的文本作为<tr>
元素的文本。
答案 0 :(得分:1)
只是猜测,但是您正在寻找子节点中的文本(<td>
可能吗?)?
我不确定蟒蛇webelement.text
是如何工作的,但也许你需要得到子元素的文本。
编辑:我认为您的问题可能实际上是<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>
所以你可以看到第三个<tr>
中没有任何文字,这解释了你所看到的内容。
所以请发布您的实际HTML / DOM,以便我们可以看到您期望的标签内是否有任何文字
答案 1 :(得分:0)
似乎你可能会遇到某种错误。这是一个相关的帖子,他们描述了如果在webelement.text调用时元素不可见,Firefox将返回空文本。他们还通过使用javascript滚动元素来提出解决方案。
检查您的Firefox版本是否受到影响,并尝试更新或实施变通方法。
请告诉我们您的进展情况!
答案 2 :(得分:0)
尝试使用标记名称表
rows = table.find_elements_by_tag_name('Table')
print rows
for element in rows:
print type(element)
print element.text
print type(element.text)
答案 3 :(得分:0)
我有同样的问题。我列出了td的所有元素,它找到了其中的5个而不是1.所以我从最后一个elem [-1] .text中获取了文本,它为我工作了
(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)