webelement.text不起作用(browser = webdriver.Firefox)

时间:2013-12-17 15:33:08

标签: python selenium selenium-webdriver

我想在<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>元素的文本。

4 个答案:

答案 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版本是否受到影响,并尝试更新或实施变通方法。

请告诉我们您的进展情况!

链接:WebElement getText() is an empty string in Firefox if element is not physically visible on the screen

答案 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)