Python Selenium如何在元素之后提取文本

时间:2016-06-18 02:29:04

标签: python selenium selenium-webdriver

以下是我尝试从

中提取文本的HTML代码
<fieldset>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">CNPJ:</label>011234560083
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">CIDADE:</label>TAUBATE
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">ESTADO:</label>SP
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">TOTAL BRUTO: </label>2.407,09
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">LIQ: </label>2.344,09
    </div>
</fieldset>

此代码

print browse.find_element_by_xpath("//div[@class='grid-3-12 form-no-lbl']").text

只返回第一个元素:011234560083

我想读取每个标签的值,例如“LIQ:”= 2.344,09

3 个答案:

答案 0 :(得分:1)

如果您可以同时使用seleniumlxml,则可以使用selenium导航到所需的页面,然后使用lxml解析HTML。例如,

import lxml.html as LH
# content = browser.page_source
content = '''\
<fieldset>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">CNPJ:</label>011234560083
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">CIDADE:</label>TAUBATE
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">ESTADO:</label>SP
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">TOTAL BRUTO: </label>2.407,09
    </div>
    <div class="grid-3-12 form-no-lbl">
            <label class="form-lbl">LIQ: </label>2.344,09
    </div>
</fieldset>'''

root = LH.fromstring(content)
labels = root.xpath('//fieldset/div[@class="grid-3-12 form-no-lbl"]/label')
data = [[item.strip() for item in [elt.text, elt.tail]] for elt in labels]

产量

[['CNPJ:', '011234560083'],
 ['CIDADE:', 'TAUBATE'],
 ['ESTADO:', 'SP'],
 ['TOTAL BRUTO:', '2.407,09'],
 ['LIQ:', '2.344,09']]

答案 1 :(得分:1)

您的代码无法正常工作,这似乎很奇怪。我没有遇到过这样的情况。我认为下面的代码应该有效。基本上我抓住LABEL内的文本并将其添加到您已找到的文本中。该组合应该可以为您提供所需的文本。

lines = browse.find_elements_by_css_selector("div.grid-3-12.form-no-lbl")
for line in lines
    print line.find_element_by_css_selector("label.form-lbl").text + line.text

答案 2 :(得分:0)

这是Selenium中一个相当普遍的问题。仅仅因为您无法使用find_element_by_*命令直接匹配文本节点。

在您的情况下,我假设您事先知道LIQESTADO等标签,并且需要通过标签获取值。

想法是通过文本找到label,将树向上移动到父级,获取文本,按:拆分并获取与期望值对应的最后一个元素:

label = "ESTADO"
text = driver.find_element_by_xpath("//label[starts-with(., '%s:')]/.." % label).text
print(text.split(":")[-1].strip())